当前位置: 首页 > 知识库问答 >
问题:

理解python中正则表达式的原始字符串

上官锦
2023-03-14

我有很多充满换行符的文本文件,我用python 3.4解析它们。我正在寻找换行符,因为它们将我的文本分成不同的部分。下面是一段文字的例子:

text = 'avocat  ;\n\n       m. x'

我天真地开始在正则表达式(RE)中查找带有' < code>\n '的换行符,没有想到反斜杠' < code>\ '是一个转义符。然而,结果证明这很好:

>>> import re

>>> pattern1 = '\n\n'
>>> re.findall(pattern1, text)
['\n\n']

然后,我明白我应该使用双反斜杠来寻找一个反斜杠。这也很好:

>>> pattern2 = '\\n\\n'
>>> re.findall(pattern2, text)
['\n\n']

但是在另一个线程上,我被告知使用原始字符串而不是常规字符串,但这种格式无法找到我正在寻找的换行符:

>>> pattern3 = r'\\n\\n'
>>> pattern3
'\\\\n\\\\n'
>>> re.findall(pattern3, text)
[]

你能帮我吗?我有点困惑,我应该使用什么样的RE王来正确匹配换行符。

共有2个答案

滕胜涝
2023-03-14

好的,我明白了。在这张精美的Python正则表达式备忘单中,它写道:“特殊字符转义与Python字符串文本中已经转义的字符转义非常相似。因此,正则表达式'\n'与正则表达式'\\n'相同”。

这就是为什么在我之前的示例中,模式1模式2匹配我的文本。然而,模式3正在寻找已经解释的文本中的“\\n”,这实际上是规范字符串表示中的“\\\n”。

卫成和
2023-03-14

使用原始字符串时不要加倍反斜杠:

>>> pattern3 = r'\n\n'
>>> pattern3
'\\n\\n'
>>> re.findall(pattern3, text)
['\n\n']
 类似资料:
  • 问题内容: 有没有办法在Java中使用原始字符串(没有转义序列)? (我正在编写大量的正则表达式代码,而原始字符串会使我的代码更具可读性) 我了解该语言不会直接提供此功能,但是有什么方法可以以任何方式“模拟”它们吗? 问题答案: 不,没有。 通常,您会将原始字符串和正则表达式放在属性文件中,但是它们也有一些转义序列要求。

  • 我有一个包含数千行的文本文件。这里有一个例子 我试图提取'nt60'、'nt50'末尾的字符串。 问题是会包含行尾字符() 我想使用正则表达式搜索来匹配从 (') 开始的字符串,但我不知道我应该用什么来匹配 。 有人能帮忙吗?

  • 问题内容: 我在尝试将我的javascript regex经验转移到Python时遇到了麻烦。 我只是想让它工作: …但是它打印无。如果我做: 它匹配…默认情况下是否匹配字符串的开头?当匹配时,如何使用结果? 我如何进行第一场比赛?是否有比python网站提供的文档更好的文档? 问题答案: 隐式添加到您的正则表达式的开头。换句话说,它仅在字符串的开头匹配。 将在所有位置重试。 一般来说,建议您在需

  • 本文向大家介绍Python正则表达式匹配字符串中的数字,包括了Python正则表达式匹配字符串中的数字的使用技巧和注意事项,需要的朋友参考一下 1.使用“\d+”匹配全数字 代码: 结果: ['479', '501', '870', '209', '213', '650'] 但是上述这种方式也会引入非纯数据,例子如下: 结果: ['479', '501', '870', '209', '213',

  • 我想为C中的一些字符串创建一个正则表达式。 这就是我目前的情况: C中的字符串由双引号(")分隔,因此正则表达式必须由 \" \". 字符串可能不包含换行符,因此我需要执行[^\n](我想)。 字符串还可能包含双引号或反斜杠字符,如果且仅当它们被转义时。因此[\\\”](我想也是这样)。 除此之外,什么都可以。 任何帮助是非常感谢我有点迷失了如何开始写这个正则表达式。

  • 问题内容: 我想使用来自用户的输入作为正则表达式模式来搜索某些文本。它可以工作,但是我该如何处理用户在正则表达式中放置有意义的字符的情况?例如,用户要搜索:正则表达式引擎会将(s)分组。我希望它像对待字符串一样对待它。我可以replace在用户输入上运行并将和 替换,但是问题是我将需要对每个可能的正则表达式符号进行替换。你知道更好的方法吗? 问题答案: 使用此功能: 4.2.3 re模块内容 转义