我在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/

10-12 07:37