我使用模式pat='dd|dddd'
,我认为它会匹配dd或dddd。
import re
re.search(pat,'ddd')
re.search(pat,'ddddd')
任何数量的d(s)匹配为什么会这样?
答案 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'