【发布时间】:2016-06-24 22:38:46
【问题描述】:
我进行了很多搜索,包括this SO post,这几乎对我有用。
我正在处理一个 huge 字符串,试图捕获出现在一系列十进制模式之后和字母数字单词之前的四位数字组。
还有其他四位数字组不符合条件,因为它们前面有单词或其他数字模式。
编辑:我的字符串不是多行的,只是为了方便显示在这里。
例如:
>> 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 应该返回:
['4010','4060']
以下是我尝试过但缺少的模式:
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.
提前致谢!
【问题讨论】:
-
re.findall(r'\d\.\d{6}\s+(\d{4})\b', my_string)怎么样? -
@WKPlus 当字符串不是多行时,您的方法对我有用 - 很好!