如果以下是字符串:
"AN : GSHJ488GL67 Customer : sh3893 Acnt No : cgk379gu Name : xyz"
我想只提取'AN : '
或'Acnt No : '
后的字母数字字符串。
我希望这个正则表达式用于python脚本。
答案 0 :(得分:3)
我会使用findall
来实现这个目标..
>>> import re
>>> s = 'AN : GSHJ488GL67 Customer : sh3893 Acnt No : cgk379gu Name : xyz'
>>> re.findall(r'\b(?:AN|Acnt No) : (\w+)', s)
['GSHJ488GL67', 'cgk379gu']
<强>解释强>:
\b # the boundary between a word character and not a word character
(?: # group, but do not capture:
AN # 'AN'
| # OR
Acnt No # 'Acnt No'
) # end of grouping
: # ' : '
( # group and capture to \1:
\w+ # word characters (a-z, A-Z, 0-9, _) (1 or more times)
) # end of \1
答案 1 :(得分:1)
正如Marc所说,使用split(&#34;&#34;)是最简单的解决方案。正则表达式方法需要一些小心。 例如,如果我们使用hwnd的正则表达式模式并且其中一个数据字段结束于&#34; AN&#34;会发生什么?
答案 2 :(得分:0)
也需要其他值。您可以将字符串转换为dict,然后通过各种键调用它们
import re
import json
data = "AN : GSHJ488GL67 Customer : sh3893 Acnt No : cgk379gu Name : xyz"
data = re.sub("\s*:\s*(\w+)\s*", r'":"\1" ,"', data)
data = '{"'+data[:-3]+'}'
mapping = json.loads(data)
print mapping
print mapping["Acnt No"]
print mapping["AN"]
<强>输出强>
{'Customer': 'sh3893', 'Acnt No': 'cgk379gu', 'Name': 'xyz', 'AN': 'GSHJ488GL67'}
cgk379gu
GSHJ488GL67