定义正则表达式

时间:2014-09-06 16:45:18

标签: python regex

如果以下是字符串:

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

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

我希望这个正则表达式用于python脚本。

3 个答案:

答案 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