简单的python正则表达式找不到单词(在空格字符内)

时间:2012-10-05 14:40:23

标签: python regex

我想使用正则表达式在字符串中查找单词AT,后跟至少一个空白字符。我将正则表达式定义如下:

p = re.compile('\s*AT\s')

允许在搜索单词之前添加其他空白字符。有了这个,我想匹配,例如。

AT\r\n
\rAT\n

但不包含附加在该单词上的普通字符的情况,例如

ATAT\r\n

但是,以下表达式

pattern.match('blah\rAT\r\n')

不会返回匹配项。此外,\bAT\b的正则表达式(包括或不包含*)也不起作用。我正在按照示例查找单词class here,因此我无法理解问题所在。也许是因为我的文字中有不可打印的字符?

2 个答案:

答案 0 :(得分:2)

.match()检查正则表达式是否匹配字符串的开头;你想要.search()

答案 1 :(得分:2)

使用\b单词边界锚点而不是查找空格来选择单词:

p = re.compile(r'\bAT\b')

如果\b是字符串中的第一个字,或者标点符号旁边而不只是空格(例如AT),What about AT?锚也会匹配。

您还想使用.search()代替.match();后者自动锚定到搜索字符串的开头:

  

如果字符串 开头的零个或多个字符与正则表达式模式匹配,则返回相应的MatchObject实例。

演示:

>>> import re
>>> p = re.compile(r'\bAT\b')
>>> p.search('blah\rAT\r\n').group()
'AT'