【问题标题】:Get shortest match with regex - lazy quantifier使用正则表达式获得最短匹配 - 惰性量词
【发布时间】:2015-02-11 14:59:51
【问题描述】:

我正在尝试从重复多次的法律文本中提取一些字符串。

我不确定我是否理解惰性量词 (?) 的工作原理。根据我的阅读,它应该使用尽可能少的字符来捕获匹配。但是在我下面的示例中似乎没有这样做:

抱歉,这里是西班牙语,但我想这很简单。

...por la afirmativa.los señores jueces Doctores genoud, hitters, de lazzari, roncoroni y soria, por los mismos fundamentos de la señora jueza doctora kogan, votaron la primea cuestion planteada tambien por la negativa.a la tercera cuestion planteada, la señora jueza doctora kogan dijo:..(text)...voto por la afirmativa.los señores jueces Doctores genoud e hitters, por los mismos fundamentos de la señora jueza doctora kogan, votaron la tercera cuestion planteada por la afirmativa.a la tercera cuestion planteada, el señor juez doctor de 拉扎里·迪乔:...

我正在尝试捕获字符串 "los señores jueces" (第 4 行)和 "votaron la tercera cuestion planteada por la afirmativa" 之间的文本。此模式有两个匹配项,因为字符串“los señores jueces”出现了两次,一次在开头,然后在第 4 行。

所以我尝试使用惰性量词 (.*?) 来获得 2 个匹配项中最短的一个:

(los señores jueces(.*?)votaron la tercera cuestion planteada por la afirmativa)

但它似乎不起作用,它匹配最长的字符串,从第 1 行开始,而不是从第二个(最短)出现。我正在https://regex101.com/ 上测试正则表达式

感谢任何帮助。

谢谢。

【问题讨论】:

  • 惰性量词不是这样工作的。事实上,惰性量词在这里什么也得不到。
  • 惰性量词影响如何从当前位置的一组可能匹配中选择匹配。它不会影响匹配位置的选择——它始终是最左边的一个。因此,RE 引擎扫描您的字符串,找到“开始”字符串,进一步扫描,直到遇到“结束”字符串,停在那里,不再尝试找到“更好”的匹配。
  • 感谢 georg 的澄清,我误解了惰性量词的使用。

标签: regex


【解决方案1】:

在匹配每个字符之前,使用负前瞻强制正则表达式引擎检查字符串 los señores jueces 是否存在。

los señores jueces((?:(?!los señores jueces).)*?)votaron la tercera cuestion planteada por la afirmativa

DEMO

【讨论】:

  • 谢谢阿维纳什!完美运行。似乎向前看将解决我的大部分问题。我将此标记为已回答。 Rgds。
  • 我在负前瞻中使用了第一部分,你也可以使用最后一部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-19
  • 1970-01-01
  • 1970-01-01
  • 2021-11-25
  • 1970-01-01
相关资源
最近更新 更多