匹配字符串的一部分,直到它到达行的末尾(python正则表达式)

时间:2011-09-09 19:32:09

标签: python regex

如果我有一个包含多行的大字符串,并且我想将一部分行匹配到该行的末尾,那么最好的方法是什么?

所以,例如我有这样的东西,我希望它在到达新行字符时停止匹配。

r"(?P<name>[A-Za-z\s.]+)"

我在previous answer中看到了这个:

  

$ - 表示匹配字符串的结尾,或者表示行的结尾   多行已启用。

那么我的问题是你如何“启用多线”作为答案的作者?

3 个答案:

答案 0 :(得分:8)

只需使用

r"(?P<name>[A-Za-z\t .]+)"

这将匹配ASCII字母,空格,制表符或句点。它将停留在未包含在组中的第一个字符 - 并且换行不是(而{em> 包含在\s中,因此多线模式是否转为无关紧要开或关)。

答案 1 :(得分:2)

您可以通过将re.MULTILINE作为第二个参数传递给re.compile()来启用多行匹配。但是,需要注意的是:由于+量词是贪婪的,因此这个正则表达式将匹配尽可能长的字符串,所以如果下一行由字母和空格组成,则正则表达式可能匹配多行($匹配任何字符串的结尾)。

有三种解决方案:

  1. 更改正则表达式,以便不是匹配包含换行符(\s)在内的任何空格,而是重复的字符集与换行符不匹配。
  2. 将量词更改为+?+的非贪婪(“最小”)版本,以便它匹配尽可能短的字符串,因此首先停在 换行。
  3. 更改您的代码,首先将文本拆分为每行的单独字符串(使用text.split('\n')

答案 2 :(得分:1)