匹配任何字符,包括Python正则表达式子表达式中的换行符,而不是全局匹配

Jas*_*n S 37 python regex

我想使用re.MULTILINE不是 re.DOTALL,因此我可以使用包含"任何字符"通配符和.与换行符不匹配的普通通配符的正则表达式.

有没有办法做到这一点?我应该使用什么来匹配那些我想要包含换行符的实例中的任何字符?

Wik*_*żew 61

要匹配换行符或没有re.S/的"任何符号" re.DOTALL,您可以使用以下任何一项:

[\s\S]
[\w\W]
[\d\D]
Run Code Online (Sandbox Code Playgroud)

主要思想是字符类中相反的简写类匹配输入字符串中的任何符号.

通过(.|\s)交替比较它和其他变化,字符类解决方案更有效,因为它涉及更少的回溯(当与量词*+量词一起使用时).比较一个小例子:(?:.|\n)+完成需要45个步骤,而且只需要[\s\S]+2个步骤.


Ali*_*jad 11

匹配任意字符(包括换行符):

正则表达式:(注意空格 ' ' 的使用也在那里)

[\S\n\t\v ]
Run Code Online (Sandbox Code Playgroud)

例子:

import re

text = 'abc def ###A quick brown fox.\nIt jumps over the lazy dog### ghi jkl'
# We want to extract "A quick brown fox.\nIt jumps over the lazy dog"
matches = re.findall('###[\S\n ]+###', text)
print(matches[0])
Run Code Online (Sandbox Code Playgroud)

'matches[0]' 将包含:
'一只敏捷的棕色狐狸。\n它跳过了那只懒狗'

'\S' Python 文档说明:

\S 匹配任何不是空白字符的字符。

(参见:https ://docs.python.org/3/library/re.html#regular-expression-syntax )