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

Python-如何使用正则表达式查找重叠的匹配项?

胡承载
2023-03-14
问题内容
>>> match = re.findall(r'\w\w', 'hello')
>>> print match
['he', 'll']

由于\ w \ w表示两个字符,因此应使用'he''ll‘。但是,为什么“ el”“ lo”正则表达式不匹配?

>>> match1 = re.findall(r'el', 'hello')
>>> print match1
['el']
>>>

问题答案:

findall默认情况下不会产生重叠匹配。但是,此表达式可以:

>>> re.findall(r'(?=(\w\w))', 'hello')
['he', 'el', 'll', 'lo']

(?=...)是一个前瞻性断言:

(?=...)如果…下一个匹配,则匹配,但不使用任何字符串。这称为先行断言。例如, 仅在后跟Isaac (?=Asimov)时匹配。'Isaac ''Asimov'



 类似资料:
  • 问题内容: 我试图创建下面的正则表达式:返回之间的字符串和(或或)从下列字符串RNA: ,让所有的比赛会被发现,包括重叠的。 我尝试了几种正则表达式,最后得到了类似的结果: 您能告诉我我的正则表达式模式中的错误吗? 问题答案: 用一个正则表达式执行此操作实际上是非常困难的,因为大多数用法 都不 希望重叠匹配。但是,您可以通过一些简单的迭代来做到这一点: 虽然,这有一些问题。您希望得到的回报是什么?

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

  • 问题内容: 在下面的代码中: 结果是: 我希望成为 如何实现? 问题答案: 使匹配器尝试从后者开始下一个扫描。

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

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

  • 问题内容: 假设我有琴弦 如果我只有一场比赛,。我为什么不明白? 问题答案: 您不能仅使用正则表达式来做到这一点,但是可以非常接近: 换句话说,您捕获了前行中的所有三个数字,然后返回并以常规方式匹配一个字符,只是为了提高匹配位置。你怎么消费这个角色都没有关系。效果一样好。而且,如果您真的很喜欢冒险,可以只使用前瞻功能,并让JavaScript处理凹凸不平的问题。 此代码改编自此答案。我本来会将此问