当前位置: 首页 > 面试题库 >

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

赵俊侠
2023-03-14
问题内容

有没有办法找出Python字符串中某个正则表达式的匹配项?例如,如果我有字符串"It actually happened when it acted out of turn."

我想知道"t a"字符串中出现了多少次。在该字符串中,"t a"出现两次。我希望函数告诉我它出现了两次。这可能吗?


问题答案:

现有的基于解决方案的解决方案适用于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,当您去-绝对比下一次搜索从下一个可能的不同起点开始要付出更多的努力,这就是我在此功能中所做的。



 类似资料:
  • 问题内容: 我在尝试将我的javascript regex经验转移到Python时遇到了麻烦。 我只是想让它工作: …但是它打印无。如果我做: 它匹配…默认情况下是否匹配字符串的开头?当匹配时,如何使用结果? 我如何进行第一场比赛?是否有比python网站提供的文档更好的文档? 问题答案: 隐式添加到您的正则表达式的开头。换句话说,它仅在字符串的开头匹配。 将在所有位置重试。 一般来说,建议您在需

  • 本文向大家介绍Python正则表达式匹配字符串中的数字,包括了Python正则表达式匹配字符串中的数字的使用技巧和注意事项,需要的朋友参考一下 1.使用“\d+”匹配全数字 代码: 结果: ['479', '501', '870', '209', '213', '650'] 但是上述这种方式也会引入非纯数据,例子如下: 结果: ['479', '501', '870', '209', '213',

  • 问题内容: 我已经阅读了Stackoverflow上的其他问题,但还没有结束。抱歉,如果已经可以回答,但是我没有任何建议在那里工作。 一切都很好,然后我尝试使用其中包含挪威字符的内容(或更像unicode的内容): 如何匹配øæå等典型的unicode字符?我希望能够同时在上述标记组和文件名标记组中匹配这些字符。 问题答案: 您需要指定标志, 并 使用前缀将您的字符串输入为Unicode字符串:

  • 问题内容: 我在用Python将字符串中的数字匹配时遇到麻烦。尽管应该明确匹配,但甚至不匹配 或仅匹配。我的监督在哪里? 问题答案: 阅读文档:http : //docs.python.org/2/library/re.html#re.match 如果在零个或多个字符 开头 的 字符串 您要使用(或)

  • 问题内容: 我目前正在使用正则表达式搜索RSS提要,以查找是否提到了某些单词和短语,然后想在匹配的任一侧提取文本。例如: 我想知道找到“ is”匹配项的位置,以便提取并输出如下内容: 我知道拆分很容易,但是我需要知道字符串中匹配的第一个字符的索引是什么,我不知道该怎么找到 问题答案: 您可以使用,它将返回字符串中“ is”的位置 或从重新使用.start() 实际上,它的匹配“是”来自“ Th 是

  • 问题内容: 我会在开头提到这个问题,尽管我离正则表达式专家很远,但是它们对我来说并不完全陌生。对于我来说,构建正则表达式来搜索特定字符串中的模式通常不是问题,但是我有一个(也许是?)独特的情况。 我有一组价值观,例如: 028938 DEF567987 390987.456 GHI345928.039 我想匹配一组特定的字符串,例如: 完全由6位数字组成的字符串 字符串,由正好6位数字,十进制组成