如果下面是字符串:定义正则表达式
"AN : GSHJ488GL67 Customer : sh3893 Acnt No : cgk379gu Name : xyz"
我想只提取以下'AN : '
或'Acnt No : '
的字母数字字符串。
我想要一个Python脚本的正则表达式。
如果下面是字符串:定义正则表达式
"AN : GSHJ488GL67 Customer : sh3893 Acnt No : cgk379gu Name : xyz"
我想只提取以下'AN : '
或'Acnt No : '
的字母数字字符串。
我想要一个Python脚本的正则表达式。
我会用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
这会打印AN和Acnt No .. – user17 2014-09-07 07:51:33
也需要包含其他值。我们也可以将字符串与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
正如Marc所言,使用split(“”)是最简单的解决方案。正则表达式方法需要谨慎。 例如,如果我们使用hwnd的正则表达式模式,并且其中一个数据字段以“AN”结尾,会发生什么?
是否可以使用finditer? – user17 2014-09-07 07:15:59
在这里,finditer方法可能是矫枉过正的。但我很困惑:在你原来的文章中,你说过你想要“在'AN:'或'Acnt No:'之后的字母数字字符串”。但是现在你抱怨说:“这也会打印AN和Acnt No”。那么你真的希望你的代码做什么? – 2014-09-07 09:41:47
欢迎来到[so]。这里的问题应该显示研究努力或尝试。请参加__ [导游] __。 – Unihedron 2014-09-06 16:57:39
为什么使用正则表达式?只需拆分“”并采取结果列表的适当元素。 – 2014-09-06 17:16:16