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

查找所有正则表达式匹配项的索引?

巢睿
2023-03-14
问题内容

我正在解析的字符串中可能包含任意数量的带引号的字符串(我在解析代码,并尝试避免使用PLY)。我想找出是否有子字符串被引用,并且我有子字符串索引。我最初的想法是使用re查找所有匹配项,然后找出它们代表的索引范围。

似乎我应该将re与类似的正则表达式一起使用\"[^\"]+\"|'[^']+'(目前,我避免使用三引号和此类字符串)。当我使用findall()时,会得到一个匹配字符串的列表,虽然有些不错,但我需要索引。

我的子字符串可能和一样简单c,因此我需要弄清楚是否c确实引用了该特定字符串


问题答案:

这就是您想要的:(源)

re.finditer(pattern, string[, flags])

返回一个迭代器,该迭代器在字符串的RE模式的所有非重叠匹配上产生MatchObject实例。从左到右扫描字符串,并以找到的顺序返回匹配项。空匹配项将包括在结果中,除非它们碰到另一个匹配项的开头。

然后,您可以从MatchObjects获取起点和终点。

例如

[(m.start(0), m.end(0)) for m in re.finditer(pattern, string)]


 类似资料:
  • 问题内容: 我正在尝试在Python 2.6中使用re查找更大系列的数字中的每10位数字系列。 我很容易就能抓住不重叠的比赛,但我希望数字系列中的每场比赛。例如。 在中 我应该得到以下列表: 我已经找到了“超前”的引用,但是我所看到的示例仅显示数字对,而不是较大的分组,而且我无法将其转换为两位数以外的数字。 问题答案: 在前瞻范围内使用捕获组。前瞻捕捉你感兴趣的文本,但是实际匹配在技术上是前瞻之前

  • 问题内容: 从那时起,我一直在TutorialsPoint上查看代码,此后一直困扰着我……看一下这段代码: 此代码成功打印: 但是根据正则表达式,为什么它不返回其他可能的结果,例如: 要么 如果此代码不适合这样做,那么我该如何编写一个可以找到所有可能匹配项的代码? 问题答案: 这是因为的贪婪,随之而来的是回溯。 字串: 正则表达式: 我们都知道那是贪婪的,并且尽可能匹配所有字符。因此,第一个匹配所

  • 问题内容: 我试图返回一个数组或切片,针对字符串针对特定正则表达式的所有匹配项。字符串是: 我想返回一个花括号之间所有字符串都匹配的数组。我尝试使用regexp软件包来完成此操作,但无法弄清楚如何返回我要查找的内容。这是我当前的代码: 但是,无论我尝试什么,每次返回的结果都是一片空白。 问题答案: 首先,您不需要正则表达式定界符。其次,使用原始字符串文字定义一个正则表达式模式是个好主意,您只需要使

  • 这是与java正则表达式匹配的所有重叠子字符串的后续。 有没有办法让这段代码更快?

  • 我正在尝试开发一个函数,该函数读取string的ArrayList,并且能够查找是否存在至少两个元组,它们从一组索引中具有相同的值,但对于一个补充索引不同。我通过使用正则表达式比较开发了这个函数的一个版本,如下所示: 但是,它是非常昂贵的,特别是如果有很多排。我曾想过创建一个更复杂的RegEx来考虑多个选择(使用“条件”),如下所示: 但问题是这样我无法比较补充索引值。对于如何定义一个可以直接满足

  • 我试图使用Python2.6中的re在一个更大的数字系列中找到每10位数字系列。 我很容易抓住没有重叠的比赛,但我想要的每一个比赛在数字系列。例如。 在“123456789123456789” 我应该得到以下列表: 我发现了对“前瞻”的引用,但我看到的示例只显示了数字对,而不是更大的分组,并且我无法将它们转换成两位数以外的数字。