2014-09-06 70 views
-5

如果下面是字符串:定义正则表达式

"AN : GSHJ488GL67 Customer : sh3893 Acnt No : cgk379gu Name : xyz" 

我想只提取以下'AN : ''Acnt No : '的字母数字字符串。

我想要一个Python脚本的正则表达式。

+5

欢迎来到[so]。这里的问题应该显示研究努力或尝试。请参加__ [导游] __。 – Unihedron 2014-09-06 16:57:39

+0

为什么使用正则表达式?只需拆分“”并采取结果列表的适当元素。 – 2014-09-06 17:16:16

回答

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 
+0

这会打印AN和Acnt No .. – user17 2014-09-07 07:51:33

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 
1

正如Marc所言,使用split(“”)是最简单的解决方案。正则表达式方法需要谨慎。 例如,如果我们使用hwnd的正则表达式模式,并且其中一个数据字段以“AN”结尾,会发生什么?

+0

是否可以使用finditer? – user17 2014-09-07 07:15:59

+0

在这里,finditer方法可能是矫枉过正的。但我很困惑:在你原来的文章中,你说过你想要“在'AN:'或'Acnt No:'之后的字母数字字符串”。但是现在你抱怨说:“这也会打印AN和Acnt No”。那么你真的希望你的代码做什么? – 2014-09-07 09:41:47