您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

找出正则表达式在Python字符串中匹配多少次

找出正则表达式在Python字符串中匹配多少次

现有的基于解决方案的解决方案适用于findall非重叠匹配(毫无疑问是最佳的,可能是因为匹配数量巨大),尽管诸如sum(1 for m in re.finditer(thepattern, thestring))(避免在您只关心计数时实现列表)的替代方案也很可能。某种特质将使用subn并忽略结果字符串…:

def countnonoverlappingrematches(pattern, thestring):
  return re.subn(pattern, '', thestring)[1]

如果您只想数数最多(例如)100场比赛,那么后一种想法的唯一真正优势就将出现。那么re.subn(pattern, '', thestring, 100)[1]可能很实际(无论有100个匹配项,还是返回1000个,甚至更大的数字,都返回100)。

计算 匹配数需要您编写更多代码,因为所讨论的内置函数都集中在非重叠匹配上。还有一个定义问题,例如,pattern是'a+'and thestring是'aa',您会认为这只是一个匹配,还是三个(第一个a,第二个,它们两个),还是…?

举例来说,假设您希望 从字符串的不同位置开始进行 重叠的匹配(然后将为上一段中的示例提供两次匹配):

def countoverlappingdistinct(pattern, thestring):
  total = 0
  start = 0
  there = re.compile(pattern)
  while True:
    mo = there.search(thestring, start)
    if mo is None: return total
    total += 1
    start = 1 + mo.start()

请注意,你必须编译模式进入在这种情况下RE对象:函数re.search不接受一个start参数(起始搜索位置)的方式 方法search呢,所以你必须要切片thestring,当您去-绝对比下一次搜索从下一个可能的不同起点开始要付出更多的努力,这就是我在此功能中所做的。

python 2022/1/1 18:26:09 有462人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶