我做了很多搜索,包括this SO post,这几乎对我有用。在
我正在处理一个巨大的字符串,试图捕捉出现在一系列十进制模式之后和字母数字单词之前的四位数组。在
还有其他四位数的数字组不符合条件,因为它们前面有单词或其他数字模式。在
编辑:我的字符串不是多行的,它只是为了方便视觉而显示在这里。在
例如:
>> my_string = """BEAVER COUNTY 001 0000
1010 BEAVER
2010 BEAVER COUNTY SCH DIST
0.008504
...(more decimals)
0.008508
4010 COUNTY SPECIAL SERVICE DIST NO.1 <---capture this 4010
4040 BEAVER COUNTY
8005 GREENVILLE SOLAR
0.004258
0.008348
...(more decimals)
0.008238
4060 SPECIAL SERVICE DISTRICT NO 7 <---capture this 4060
"""
理想的re.findall
应该返回:
以下是我尝试过的缺少的模式:
re.findall(r'(?=(\d\.\d{6}\s+)(\s+\d{4}\s))', my_string)
# also tried
re.findall("(\s+\d{4}\s+)(?:(?!^\d+\.\d+)[\s\S])*", my_string)
# which gets me a little closer but I'm still not getting what I need.
提前谢谢!在
这将帮助您:
使用第三组表示\3
Demo And Explaination
试试这个模式:
我写了一个小代码,并对照它进行了检查。在
^{pr2}$单线串方法:
只需在4个独立数字之前匹配浮点数:
见this regex demo
Python demo:
^{pr2}$原始答案:多行字符串
您可以使用一个正则表达式,它将检查上一行的浮点值,然后在下一行捕获独立的4位数字:
见regex demo here
模式说明:
^
-行的开头(使用re.M
)\d+\.\d+
-1+个数字,.
还有1个或更多个数字*
-零个或多个空格(替换为[^\S\r\n]
只匹配水平空白)[\r\n]+
-1个或多个LF或CR符号(若要仅限于1个换行符,请替换为(?:\r?\n|\r)
)(\d{4})\b
-第1组由re.findall
匹配4个数字,后跟单词边界(非数字、非字母、非_
)返回。在Python demo:
相关问题 更多 >
编程相关推荐