2013-03-19 28 views
3

我写了这个正则表达式来匹配字符串组合。现在我想修改这个正则表达式,而不是让它匹配这些字符串:'st,nd,rd,th'。我想匹配所有其他组合的字符串,但阿尔法部分不应该是列出的字符串之一。在python中忽略地址内的序号

_NUM_ALPHA_PAIR_RE = re.compile(r'[0-9/]+[A-Z,a-z]+', re.I) 

我想匹配: '6A' 或 '6S',但我并不想匹配 '1ST' 或 '第二'

+1

+1 Serdalis。如果有大量的误报过滤出来,用Python进行过滤可能会有点慢。另一方面,在给定病理输入的情况下,具有负向预测的正则表达式可以呈指数级缓慢。如果这两者都不重要,则归结为更简单。如果你甚至不知道如何编写正则表达式,很明显过滤对你来说会更简单... – abarnert 2013-03-19 23:54:22

回答

3

使用负前瞻(?!st|nd|rd|th)

_NUM_ALPHA_PAIR_RE = re.compile(r'[0-9/]+(?!st|nd|rd|th)[,a-z]+', re.I) 

In [125]: import re 
In [126]: _NUM_ALPHA_PAIR_RE = re.compile(r'[0-9/]+(?!st|nd|rd|th)[,a-z]+', re.I) 

In [127]: _NUM_ALPHA_PAIR_RE.match('6A') 
Out[127]: <_sre.SRE_Match at 0xb141c98> 

In [128]: _NUM_ALPHA_PAIR_RE.match('1ST') 
# None 
+1

其实我最终使用这个 '_NUM_ALPHA_PAIR_RE = re.compile(r'[0-9 /] + (?!st $ | nd $ | rd $ | th $)[,az] +',re.I)' – ronak 2013-03-20 00:57:28