我在python中打开了一个复杂的文本文件,将我需要的所有其他内容都与正则表达式进行了匹配,但被一个搜索所困扰。
我想在“从这里开始”行之后捕获数字。两行之间的空间很重要,并计划在以后拆分。
start after here: test
5.7,-9.0,6.2
1.6,3.79,3.3
码:
text = open(r"file.txt","r")
for line in text:
find = re.findall(r"start after here:[\s]\D+.+", line)
我在这里https://regexr.com/尝试过,它似乎可以工作,但它适用于Java。
它什么也没找到。我认为这是因为我需要合并多行,但是不确定如何以不同方式读取文件或合并。一直在尝试对正则表达式进行许多调整,但没有成功。
最佳答案
模式start after here:[\s]\D+.+
匹配文字单词,然后使用[\s]
匹配空白字符(您可以省略方括号)。
然后匹配1+倍而不是数字,该匹配将一直匹配到5.7
之前。然后将1+次除换行符以外的任何字符都匹配,这将匹配5.7,-9.0,6.2
。它将不匹配随后的空行和下一行。
一种选择是匹配您的字符串,然后匹配所有不以捕获组中的十进制开头的行。
\bstart after here:.*[\r\n]+(\d+\.\d+.*(?:[\r\n]+[ \t]*\d+\.\d+.*)*).*
包含空行的值在第一个捕获组中。
例如
import re
regex = r"\bstart after here:.*[\r\n]+(\d+\.\d+.*(?:[\r\n]+[ \t]*\d+\.\d+.*)*).*"
test_str = ("start after here: test\n\n\n"
"5.7,-9.0,6.2\n\n"
"1.6,3.79,3.3\n")
matches = re.findall(regex, test_str)
print(matches)
结果
['5.7,-9.0,6.2\n\n1.6,3.79,3.3']
Regex demo | Python demo
如果要在逗号前匹配小数点(或仅一位或多位数字),则可以分割1条或多条换行符并使用:
[+-]?(?:\d+(?:\.\d+)?|\.\d+)(?=,|$)
Regex demo
关于python - 正则表达式在多个空行之后捕获文本文件中的信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56758168/