使用正则表达式查找多次出现的字符

时间:2010-11-21 18:01:17

标签: python regex

我使用模式pat='dd|dddd',我认为它会匹配dd或dddd。

import re
re.search(pat,'ddd')
re.search(pat,'ddddd')

任何数量的d(s)匹配为什么会这样?

2 个答案:

答案 0 :(得分:10)

你需要以某种方式锚定正则表达式。正则表达式在字符串中搜索以查找模式。所以“dd”将在“dddddddd”中找到,位于偏移0,1,2,3,4,5,6。

如果您只想匹配整个字符串,请尝试^dd$。 ^匹配字符串的开头,$匹配结束。所以^(dd|dddd)$会有你想要的行为。

如果您希望它仅匹配dd或dddd但在字符串中。然后你可能想要使用:[^d](dd|dddd)[^d]哪个匹配“任何不是d的东西”然后是两个或四个ds然后“任何不是d”

答案 1 :(得分:2)

正如Charles Duffy已经指出的那样,search并不是你应该使用的功能。尝试使用match甚至findall

>>> import re
>>> re.match('dd|dddd','dd').group()
'dd'
>>> re.findall('dd|dddd','dd')
['dd']
>>> re.match('dd|dddd','ddddd').group()
'dd'
>>> re.match('dddd|dd','ddddd').group()
'dddd'