作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我想使用 re.MULTILINE
但不是 re.DOTALL
, 这样我就可以拥有一个包含“任何字符”通配符和不匹配换行符的普通 .
通配符的正则表达式。
有没有办法做到这一点?在我想包含换行符的情况下,我应该使用什么来匹配任何字符?
最佳答案
要匹配换行符或不带 re.S
/re.DOTALL
的“任何符号”,您可以使用以下任何一种:
(?s).
- inline modifier group使用 s
标志设置所有 .
模式匹配任何字符的范围,包括换行符
以下任何解决方法:
[\s\S]
[\w\W]
[\d\D]
主要思想是字符类中相反的速记类匹配输入字符串中的任何符号。
将其与 (.|\s)
和其他带有交替的变体进行比较,字符类解决方案效率更高,因为它涉及的回溯更少(与 *
一起使用时) code> 或 +
量词)。比较小例子:它需要(?:.|\n)+
45步完成,需要[\s\S]+
只需 2 个步骤。
查看 Python demo我匹配以 123
开头的行,直到行首第一次出现 3
并包括该行的其余部分:
import re
text = """abc
123
def
356
more text..."""
print( re.findall(r"^123(?s:.*?)^3.*", text, re.M) )
# => ['123\ndef\n356']
print( re.findall(r"^123[\w\W]*?^3.*", text, re.M) )
# => ['123\ndef\n356']
关于python - 匹配任何字符,包括 Python 正则表达式子表达式中的换行符,而不是全局匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33312175/
我是一名优秀的程序员,十分优秀!