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

Python 使用正则表达式查找字符的多次出现,python,regex,Python,Regex,我使用pat='dd | dddd',并且我认为它将匹配dd或dddd import re re.search(pat,'ddd') re.search(pat,'ddddd') 任何数量的ds匹配,为什么会这样?您需要以某种方式锚定正则表达式。正则表达式在字符串中搜索以查找模式。因此dd将在dddd中的偏移量0,1,2,3,4,5,6处找到 如果只想匹配整个字符串,请尝试^dd$。^匹配字符串的开头,$匹配字符串的结尾。因此,^dd | dddd$将具有您想要的行为 如果希望它只匹配dd或d

我使用pat='dd | dddd',并且我认为它将匹配dd或dddd

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

任何数量的ds匹配,为什么会这样?

您需要以某种方式锚定正则表达式。正则表达式在字符串中搜索以查找模式。因此dd将在dddd中的偏移量0,1,2,3,4,5,6处找到

如果只想匹配整个字符串,请尝试^dd$。^匹配字符串的开头,$匹配字符串的结尾。因此,^dd | dddd$将具有您想要的行为


如果希望它只匹配dd或dddd,但在字符串内。然后您可能需要使用:[^d]dd | dddd[^d],它将匹配任何不匹配的内容,然后是两个或四个ds,然后是任何不匹配的内容

您需要以某种方式锚定正则表达式。正则表达式在字符串中搜索以查找模式。因此dd将在dddd中的偏移量0,1,2,3,4,5,6处找到

如果只想匹配整个字符串,请尝试^dd$。^匹配字符串的开头,$匹配字符串的结尾。因此,^dd | dddd$将具有您想要的行为


如果希望它只匹配dd或dddd,但在字符串内。然后您可能想使用:[^d]dd | dddd[^d],它将匹配任何不匹配的内容,然后是两个或四个ds,然后是任何不匹配的内容。正如Charles Duffy已经指出的那样,搜索并不是您应该使用的功能。尝试使用match甚至findall


正如查尔斯·达菲(Charles Duffy)所指出的,搜索并不是你应该使用的功能。尝试使用match甚至findall


除了已经给出的答案之外,还可以考虑使用R.Mead代替Re.String,以避免在字符串的开头找到匹配项。你仍然需要锚定结束以获得你想要的行为,所以除了已经给出的答案之外,还要注意那些其他答案,考虑使用R.Mead而不是R.String来避免在字符串的开始之外找到匹配。你仍然需要锚定终点以获得你想要的行为,所以仍然要注意其他答案
>>> 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'