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

Python正则表达式:贪婪模式返回多个空匹配

岳浩宕
2023-03-14
问题内容

这种模式仅意味着将字符串中的所有内容抓取到数据中第一个潜在句子边界为止:

[^\.?!\r\n]*

输出:

>>> pattern = re.compile(r"([^\.?!\r\n]*)")
>>> matches = pattern.findall("Australians go hard!!!") # Actual source snippet, not a personal comment about Australians. :-)
>>> print matches
['Australians go hard', '', '', '', '']

从Python文档中:

re.findall(模式,字符串,标志= 0)

返回字符串中模式的所有非重叠匹配项,作为字符串列表。从左到右扫描字符串,并以找到的顺序返回匹配项。如果模式中存在一个或多个组,则返回一个组列表;否则,返回一个列表。如果模式包含多个组,则这将是一个元组列表。空匹配项将包括在结果中,除非它们碰到另一个匹配项的开头。

现在,如果从左到右扫描字符串,并且运算符是贪婪的,那么很有意义的是,返回的第一个匹配项是整个字符串,直到感叹号为止。但是,在消耗完该部分之后,我看不到该模式如何准确地产生四次空匹配,大概是通过在“
d”之后向左扫描字符串来实现的。我确实知道
运算符意味着该模式可以匹配空字符串,但我只是看不出它在字母的后缀“
d”和前导“!”之间会多次执行该操作。标点符号。

添加^锚具有以下效果:

>>> pattern = re.compile(r"^([^\.?!\r\n]*)")
>>> matches = pattern.findall("Australians go hard!!!")
>>> print matches
['Australians go hard']

由于这消除了空字符串匹配,因此似乎表明所述空匹配发生在字符串的前导“ A”之前。但这似乎与按照找到的顺序返回的匹配项的文档相矛盾(应该先出现前导“
A”之前的匹配项),而且,恰好有四个空匹配项使我感到困惑。


问题答案:

*量词允许捕获长度为零的子串的图案。在您的原始代码版本中(^前面没有锚),其他匹配项是:

  • 的端部之间的长度为零的字符串hard和所述第一!
  • 第一个和第二个之间的零长度字符串 !
  • 第二个和第三个之间的零长度字符串 !
  • !文本的第三和结尾之间的零长度字符串

如果您喜欢这里,可以进一步切片/切块。

^现在,将锚添加到最前面可以确保只有一个子字符串可以匹配该模式,因为输入文本的开头恰好发生一次。



 类似资料:
  • 问题内容: 我如何制作像这样的python正则表达式,使得在给定的情况下,python匹配而不是? 我知道我可以使用代替,但是我正在寻找一种更通用的解决方案,使我的regex更加整洁。有什么办法告诉python“嘿,尽快匹配它”? 问题答案: 您寻找功能强大的吗? http://docs.python.org/3/howto/regex.html#greedy-versus-non-greedy

  • 问题内容: 我主要关心的是Java风格,但是我也希望了解其他信息。 假设您有一个像这样的子模式: 虽然这不是很有用,但可以说这两个捕获组(例如和)是更大模式的一部分,该模式与对这些组的反向引用匹配,依此类推。 因此,两者都是贪婪的,因为他们试图捕获尽可能多的东西,只在需要时花更少的时间。 我的问题是:谁更贪婪?是否获得优先权,仅在必要时才分配份额? 关于什么: 假设确实获得了优先权。假设它过于贪婪

  • 本文向大家介绍Python正则表达式教程之三:贪婪/非贪婪特性,包括了Python正则表达式教程之三:贪婪/非贪婪特性的使用技巧和注意事项,需要的朋友参考一下 之前已经简单介绍了Python正则表达式的基础与捕获,那么在这一篇文章里,我将总结一下正则表达式的贪婪/非贪婪特性。  贪婪 默认情况下,正则表达式将进行贪婪匹配。所谓“贪婪”,其实就是在多种长度的匹配字符串中,选择较长的那一个。例如,如下

  • 本文向大家介绍php正则表达式中贪婪与非贪婪介绍,包括了php正则表达式中贪婪与非贪婪介绍的使用技巧和注意事项,需要的朋友参考一下 一、贪婪与非贪婪 什么叫贪婪,比如说要从字符串中<td>面包一</td><td>面包二</td>吃面包,本来你只可以吃面包一,可是你贪心,于是就把第一个<td>到最后一个</td>里面的两个面包取出来了,你想多吃点,非贪婪也就是你不贪吃了,就只吃面包一。 我们来看看正

  • 本文向大家介绍python正则表达式的懒惰匹配和贪婪匹配说明,包括了python正则表达式的懒惰匹配和贪婪匹配说明的使用技巧和注意事项,需要的朋友参考一下 第一次碰到这个问题的时候,确实不知道该怎么办,后来请教了一个大神,加上自己的理解,才了解是什么意思,这个东西写python的会经常用到,而且会特别频繁,在此写一篇博客,希望可以帮到一些朋友。 例:一个字符串 “abcdacsdnd” ①懒惰匹配

  • 问题内容: 我有下一个代码: 并具有下一个输出: 但我认为它必须是: 有人请解释为什么。 问题答案: 由于您的模式是非贪婪的,因此它们在仍由匹配项组成的情况下,匹配的文本越少越好。 去除 ?在第二组中,您会得到 单词 word word big small