【问题标题】:Same pattern but different results相同的模式但不同的结果
【发布时间】:2016-04-02 12:15:21
【问题描述】:

在 RegExr.com 的示例部分,有一个 2-5 个字母回文的代码。在 Python 中使用完全相同的模式似乎并不能像 RegExr 一样捕获所有结果!

Python 不会捕获少于 4 个字符的单词,例如“dad”和“555”。代码是这样的

\b(\w)?(\w)\w?\2\1

这些不同结果的原因是什么?

【问题讨论】:

  • 看看here
  • 您还想包含一点 Python 代码吗?即你在使用re.match("\b(\w)?(\w)\w?\2\1")吗?

标签: python regex


【解决方案1】:

当第一个捕获组重复时,它与 Python 中的条件一起使用:

\b(\w)?(\w)\w?\2(?(1)\1)

(?(1)\1) 翻译为:如果第一个捕获组成功,则再次匹配第一个捕获组。

差异很可能是由于正则表达式引擎对可选的不匹配捕获组的处理方式不同。例如。 RegExr 在您的浏览器中使用 JavaScript 引擎,它将空的捕获组视为未定义。当 undefined 再次尝试匹配字符串末尾时,它将成功。然而,在 Python 中,它是不同的,并且只有在可选的捕获组成功时才会再次成功匹配。这只是实现细节。

【讨论】:

  • 请注意,如果您将问号放在 组中,原始的正则表达式将适用于任何风格,如您所见here。这样,各组就可以在仍然参加比赛的同时不进行任何比赛。 ECMAScript(JavaScript 和 ActionScript 等背后的规范)是我所知道的唯一一种将非参与组视为空组的风格。
猜你喜欢
  • 2022-06-10
  • 2023-03-15
  • 1970-01-01
  • 2020-02-14
  • 1970-01-01
  • 1970-01-01
  • 2019-08-28
  • 2022-08-05
  • 1970-01-01
相关资源
最近更新 更多