正则表达式的新手...找不到我想要的东西。我有一个来自NWS公告的字符串:
LTUS41 KCAR 141558 AAD TMLB Forecast for the National Parks
KHNX 141001 RECHNX Weather Service San Joaquin Valley
我的目的是提取几个字段。在第一个字符串中,我想要“ AAD”,在第二个字符串中,我想要“ RECHNX”。我尝试过:
( )\w{3} #for the first string
和
\w{6} #for the 2nd string
但是这些可以找到导致我想要的字符串的所有3和6个字符串。
答案 0 :(得分:1)
假设您要提取的字段始终以大写字母开头,并以6位数字和一个空格开头,则此正则表达式将达到目的:
(?<=\d{6}\s)[A-Z]+
演示:https://regex101.com/r/dsDHTs/1
编辑:如果要最多匹配两个以6位数字开头的字母数字大写单词,则可以使用:
(?<=\d{6}\s)([A-Z0-9]+\b)\s(?:([A-Z0-9]+\b))*
演示:https://regex101.com/r/dsDHTs/5
如果您有有效字段的特定列表,也可以使用:
(AAD|TMLB|RECHNX|RR4HNX)
答案 1 :(得分:0)
由于您要提取的子字符串是一个跟在数字后的单词,并用空格分隔,因此您可以将re.search
与以下正则表达式结合使用(假设您的输入存储在s
中):>
re.search(r'\b\d+ (\w+)', s).group(1)
答案 2 :(得分:0)
要从每行中读取第一组单词字符,您可以使用类似
(\w+) (\w+) (\w+) (\w+)
。
然后,从第一行读取组4和第二行读取组3。
查看以下程序。它从每个源行打印四组:
import re
txt = """LTUS41 KCAR 141558 AAD TMLB Forecast for the National Parks
KHNX 141001 RECHNX Weather Service San Joaquin Valley"""
n = 0
pat = re.compile(r'(\w+) (\w+) (\w+) (\w+)')
for line in txt.splitlines():
n += 1
print(f'{n:2}: {line}')
mtch = pat.search(line)
if mtch:
gr = [ mtch.group(i) for i in range(1, 5) ]
print(f' {gr}')
结果是:
1: LTUS41 KCAR 141558 AAD TMLB Forecast for the National Parks
['LTUS41', 'KCAR', '141558', 'AAD']
2: KHNX 141001 RECHNX Weather Service San Joaquin Valley
['KHNX', '141001', 'RECHNX', 'Weather']