我有一条短信
var12.1 一个 一个 每日生活津贴88 123 secondVar12.1
var和secondVar之间的字符串可能是不同的(并且可能有不同的计数)。
如何使用regexp将其转储?
我正在尝试这样的东西,但没有用:
re.findall(r"^var[0-9]+\.[0-9]+[\n.]+^secondVar[0-9]+\.[0-9]+", str, re.MULTILINE)发布于 2015-07-15 19:35:41
你可以用:
var\d+(?:(?!var\d).)*?secondVar见演示。)改性剂必须与此正则表达式一起使用,这样.才能匹配换行符。分隔符之间的文本将位于第1组中。
注意:最近的匹配将由于(?:(?!var\d).)*? 脾气暴躁的象征而匹配(也就是说,如果在var + 1+数字之后有另一个var +一个数字,那么匹配将在第二个var和secondVar之间。
NOTE2:您可能希望使用\b单词边界来匹配以它们开头的单词:\bvar(?:(?!var\d).)*?\bsecondVar。
REGEX解释
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']发布于 2015-07-15 19:36:13
您正在寻找re.DOTALL标志,其正则表达式如下:var(.*?)secondVar。这个正则表达式将捕获var和secondVar之间的所有内容。
https://stackoverflow.com/questions/31439488
复制相似问题