【问题标题】:Replacement for the \G anchor in python [duplicate]替换python中的\ G锚[重复]
【发布时间】:2019-11-11 19:23:52
【问题描述】:

\G 修饰符:

\G 强制模式只返回作为连续匹配链一部分的匹配。从第一个匹配开始,每个后续匹配都必须有一个匹配。

但是,在 python 标准 re 模块中,\G 不是可用的锚。有没有办法将 \G 可能完成的操作转换为对 python 友好的正则表达式?什么是包含\G 标志的正则表达式示例,该标志可以重写为可在 python 中编译的正则表达式?

【问题讨论】:

  • 您可以使用PyPi regex 模块而不是标准的re 模块来使用\G,否则,您可能不得不在循环中使用您的正则表达式。
  • @ctwheels 是的,我浏览了这个——pypi.org/project/regex——它提供了很多!我只是想知道如果可以使用标准的re 模块,如何使用(或替代)\G
  • 除了用所有可能性构造一个非常长的正则表达式或使用代码生成它之外,没有直接的替代方法。使用标准 re 模块的最佳选择就是循环。
  • @ctwheels 我明白了——在这种情况下,您是否只想在下面的答案中发布您的 cmets?选项 1 -- 使用 ths 正则表达式模块;选项 2 -- 使用这个基本的for 循环,例如...

标签: python regex


【解决方案1】:

在标准re 模块中没有\G 的替代品。您的选择如下:

我创建了下面的示例,假设有人想要(单独)查找字符串开头的数字 - 很简单,但我认为它很好地说明了这个问题。匹配字符串开头的每个数字,直到出现非数字字符,然后硬停止。

PyPi 正则表达式

您可以改用PyPi regex 模块(或其他支持它的模块)。

See code in use here

import regex
s = '12x34x56'
r = r'\G\d'
print(regex.findall(r,s))

输出:

['1', '2']

用例特定的标准正则表达式

如果不使用 PyPi 正则表达式模块,您将不得不制定更严格的规则或完全改变您的逻辑。逻辑根据\G的使用情况发生巨大变化:

See code in use here

import re
s = '12x34x56'
r = r'\d+'
m = re.match(r,s)
print(list(m[0]))

输出

['1', '2']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-11
    • 2012-09-10
    • 1970-01-01
    • 2019-09-30
    • 2018-04-05
    • 2021-01-19
    • 1970-01-01
    • 2019-05-15
    相关资源
    最近更新 更多