如何使用Python的正则表达式匹配下划线?

时间:2016-05-26 14:58:50

标签: python regex

我在使用正则表达式匹配Python中的下划线字符时遇到问题。只是在shell中玩,我得到:

>>> import re
>>> re.match(r'a', 'abc')
<_sre.SRE_Match object at 0xb746a368>
>>> re.match(r'_', 'ab_c')
>>> re.match(r'[_]', 'ab_c')
>>> re.match(r'\_', 'ab_c')

我原本预计其中至少有一个会返回一个匹配对象。我做错了吗?

2 个答案:

答案 0 :(得分:2)

尝试以下方法:

re.search(r'\_', 'ab_c')

你确实是逃脱下划线角色的权利! 请注意,您只能对字符串的开头使用匹配,这也可以从文档(https://docs.python.org/2/library/re.html)中看出:

  

如果字符串开头的零个或多个字符与正则表达式模式匹配,则返回相应的MatchObject实例。如果字符串与模式不匹配,则返回None;请注意,这与零长度匹配不同。

在这种情况下你应该使用search

  

扫描字符串,查找正则表达式模式生成匹配项的第一个位置,并返回相应的MatchObject实例。如果字符串中没有位置与模式匹配,则返回None;请注意,这与在字符串中的某个点找到零长度匹配不同。

答案 1 :(得分:1)

如果您要查找的模式不在搜索字符串的开头,请使用re.search代替re.match

  

re.match(pattern,string,flags = 0)

     

尝试在字符串的开头应用模式,返回匹配项   对象,如果未找到匹配则为无。

     

re.search(pattern,string,flags = 0)

     

扫描字符串以查找与模式匹配的内容,然后返回a   匹配对象,如果未找到匹配则为无。

您不需要转义_甚至使用原始字符串。

>>> re.search('_', 'ab_c')
Out[4]: <_sre.SRE_Match object; span=(2, 3), match='_'>