【问题标题】:How can I replace patterns using re module in python3如何在 python3 中使用 re 模块替换模式
【发布时间】:2016-06-12 05:06:50
【问题描述】:

我想在一行中多次替换某些模式(字母之间的空格)。
这是我的代码:

s = re.sub('([a-z]) ([a-z])', '\g<1>_\g<2>', 'series m coupe')

我希望将 'series m coupe' 替换为 'series_m_coupe',但我得到的是 'series_m coupe'。即使我放了count=0,也没用……

我猜是因为“m”是 1 个音节。当我像 'series mini coupe' 这样输入超过 1 个音节时,效果很好:

s = re.sub('([a-z]) ([a-z])', '\g<1>_\g<2>', 'series mini coupe')
s
'series_mini_coupe'

【问题讨论】:

    标签: regex string python-3.x replace


    【解决方案1】:

    当您使用([a-z]) ([a-z]) 时,s mseries m coupe 中匹配,正则表达式索引在m 之后。因此,正则表达式引擎正在寻找该字母之后的第二个匹配项,但找不到任何匹配项。

    您需要使用前瞻来匹配重叠的字符串:

    s = re.sub('([a-z]) (?=[a-z])', '\g<1>_', 'series m coupe')
                        ^^^     ^
    

    regex demo

    (?=[a-z]) 前瞻将检查空格是否后跟小写 ASCII 字母,但不会消耗它。在替换模式中,\g&lt;2&gt; 应该被删除,因为不再有第二个捕获组。

    【讨论】:

    • 哇!!多么聪明、美妙的代码啊!!谢谢,我不知道“前瞻”。真的很有帮助:)
    猜你喜欢
    • 1970-01-01
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    • 2020-10-10
    • 2011-07-14
    • 1970-01-01
    相关资源
    最近更新 更多