Python正则表达式匹配所有出现的decimal模式,后跟另一个模式

2024-06-11 04:01:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我做了很多搜索,包括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应该返回:

^{pr2}$

以下是我尝试过的缺少的模式:

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.

提前谢谢!在


Tags: 字符串restringmydistmore模式数字
3条回答

这将帮助您:

"((\d+\.\d+)\s+)+(\d+)\s?(?=\w+)"gm

使用第三组表示\3

Demo And Explaination

试试这个模式:

re.compile(r'(\d+[.]\d+)+\s+(?P<cap>\d{4})\s+\w+')

我写了一个小代码,并对照它进行了检查。在

^{pr2}$

单线串方法:

只需在4个独立数字之前匹配浮点数:

r'\d+\.\d+\s+(\d{4})\b'

this regex demo

Python demo

^{pr2}$

原始答案:多行字符串

您可以使用一个正则表达式,它将检查上一行的浮点值,然后在下一行捕获独立的4位数字:

re.compile(r'^\d+\.\d+ *[\r\n]+(\d{4})\b', re.M)

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

import re
p = re.compile(r'^\d+\.\d+ *[\r\n]+(\d{4})\b', re.MULTILINE)
s = "BEAVER COUNTY 001 0000 \n1010 BEAVER \n2010 BEAVER COUNTY SCH DIST \n0.008504 \n...(more decimals)\n0.008508 \n4010 COUNTY SPECIAL SERVICE DIST NO.1   < -capture this 4010\n4040 BEAVER COUNTY \n8005 GREENVILLE SOLAR\n0.004258 \n0.008348 \n...(more decimals)\n0.008238 \n4060 SPECIAL SERVICE DISTRICT NO 7   < -capture this 4060"
print(p.findall(s)) # => ['4010', '4060']

相关问题 更多 >