如果我有一个包含多行的大字符串,并且我想将一部分行匹配到该行的末尾,那么最好的方法是什么?
所以,例如我有这样的东西,我希望它在到达新行字符时停止匹配。
r"(?P<name>[A-Za-z\s.]+)"
我在previous answer中看到了这个:
$ - 表示匹配字符串的结尾,或者表示行的结尾 多行已启用。
那么我的问题是你如何“启用多线”作为答案的作者?
答案 0 :(得分:8)
只需使用
r"(?P<name>[A-Za-z\t .]+)"
这将匹配ASCII字母,空格,制表符或句点。它将停留在未包含在组中的第一个字符 - 并且换行不是(而{em> 包含在\s
中,因此多线模式是否转为无关紧要开或关)。
答案 1 :(得分:2)
您可以通过将re.MULTILINE
作为第二个参数传递给re.compile()
来启用多行匹配。但是,需要注意的是:由于+
量词是贪婪的,因此这个正则表达式将匹配尽可能长的字符串,所以如果下一行由字母和空格组成,则正则表达式可能匹配多行($
匹配任何字符串的结尾)。
有三种解决方案:
\s
)在内的任何空格,而是重复的字符集与换行符不匹配。+?
,+
的非贪婪(“最小”)版本,以便它匹配尽可能短的字符串,因此首先停在 换行。text.split('\n')
。答案 2 :(得分:1)