使用 Python 正则表达式匹配换行符和任何字符
Matching newline and any character with Python regex
我有这样的文字
var12.1
a
a
dsa
88
123!!!
secondVar12.1
var
和secondVar
之间的字符串可能不同(并且它们的数量可能不同)。
如何使用正则表达式转储它?
我正在尝试这样的事情但无济于事:
re.findall(r"^var[0-9]+\.[0-9]+[\n.]+^secondVar[0-9]+\.[0-9]+", str, re.MULTILINE)
您可以通过以下方式获取它:
var\d+(?:(?!var\d).)*?secondVar
请参阅 demo. re.S
(or re.DOTALL
) modifier 必须与此正则表达式一起使用 以便 .
可以匹配换行符 。分隔符之间的文本将在第 1 组中。
注意: 最接近的匹配项 将被匹配,因为 (?:(?!var\d).)*?
(即如果您有另一个 var
+ var
之后的一个数字 + 1+ 个数字然后匹配将在第二个 var
和 secondVar
.
之间
注意 2: 您可能希望使用 \b
字边界来匹配以它们开头的字词:\bvar(?:(?!var\d).)*?\bsecondVar
.
正则表达式解释
var
- 匹配起始分隔符
\d+
- 1+ 位数
(?:(?!var\d).)*?
- 匹配任何字符的缓和贪婪标记,0 次或多次(但尽可能少)重复,不启动字符序列 var
和数字
secondVar
- 按字面匹配 secondVar
。
import re
p = re.compile(r'var\d+(?:(?!var\d).)*?secondVar', re.DOTALL)
test_str = "var12.1\na\na\ndsa\n\n88\n123!!!\nsecondVar12.1\nvar12.1\na\na\ndsa\n\n88\n123!!!\nsecondVar12.1"
print(p.findall(test_str))
输入字符串的结果(出于演示目的我将其加倍):
['12.1\na\na\ndsa\n\n88\n123!!!\n', '12.1\na\na\ndsa\n\n88\n123!!!\n']
您正在寻找 re.DOTALL
标志,其正则表达式如下:var(.*?)secondVar
。此正则表达式将捕获 var
和 secondVar
.
之间的所有内容
我有这样的文字
var12.1
a
a
dsa
88
123!!!
secondVar12.1
var
和secondVar
之间的字符串可能不同(并且它们的数量可能不同)。
如何使用正则表达式转储它?
我正在尝试这样的事情但无济于事:
re.findall(r"^var[0-9]+\.[0-9]+[\n.]+^secondVar[0-9]+\.[0-9]+", str, re.MULTILINE)
您可以通过以下方式获取它:
var\d+(?:(?!var\d).)*?secondVar
请参阅 demo. re.S
(or re.DOTALL
) modifier 必须与此正则表达式一起使用 以便 .
可以匹配换行符 。分隔符之间的文本将在第 1 组中。
注意: 最接近的匹配项 将被匹配,因为 (?:(?!var\d).)*?
var
+ var
之后的一个数字 + 1+ 个数字然后匹配将在第二个 var
和 secondVar
.
注意 2: 您可能希望使用 \b
字边界来匹配以它们开头的字词:\bvar(?:(?!var\d).)*?\bsecondVar
.
正则表达式解释
var
- 匹配起始分隔符\d+
- 1+ 位数(?:(?!var\d).)*?
- 匹配任何字符的缓和贪婪标记,0 次或多次(但尽可能少)重复,不启动字符序列var
和数字secondVar
- 按字面匹配secondVar
。
import re
p = re.compile(r'var\d+(?:(?!var\d).)*?secondVar', re.DOTALL)
test_str = "var12.1\na\na\ndsa\n\n88\n123!!!\nsecondVar12.1\nvar12.1\na\na\ndsa\n\n88\n123!!!\nsecondVar12.1"
print(p.findall(test_str))
输入字符串的结果(出于演示目的我将其加倍):
['12.1\na\na\ndsa\n\n88\n123!!!\n', '12.1\na\na\ndsa\n\n88\n123!!!\n']
您正在寻找 re.DOTALL
标志,其正则表达式如下:var(.*?)secondVar
。此正则表达式将捕获 var
和 secondVar
.