【问题标题】:Substitute only part of regex in re.sub仅替换 re.sub 中的正则表达式的一部分
【发布时间】:2016-02-04 06:33:02
【问题描述】:

我只想替换传递给re.sub 的正则表达式的一部分([^\d+] 只是为了确保在此之后没有数字,即捕获整个整数(包含所有数字)) .但是,下面的代码会替换下一个字符(即在第一个示例中吞下下一个“”)。

import re
pattern = r'foo-%d[^\d+]'

k = 12 # only substitute entire "foo-12" occurrences
result = re.sub(pattern % k, '@foo-%d@' % k, 'dasds foo-12 gfd9843')
# got: result == 'dasds @foo-12@gfd9843'
assert result == 'dasds @foo-12@ gfd9843', result

k = 1 # only substitute entire "foo-1" occurrences
result = re.sub(pattern % k, '@foo-%d@' % k, 'dasds foo-12 gfd9843')
assert result == 'dasds foo-12 gfd9843', result

k = 1 # only substitute entire "foo-1" occurrences
result = re.sub(pattern % k, '@foo-%d@' % k, 'dasds foo-11 gfd9843')
assert result == 'dasds foo-11 gfd9843', result

我该如何解决这个问题?我是否至少在正则表达式的正确轨道上?

【问题讨论】:

    标签: python regex substitution


    【解决方案1】:

    在此处使用\b

    import re
    k = 12 # only substitute entire "foo-12" occurrences
    s = 'dasds foo-12 gfd9843'
    result = re.sub(r'foo-%d\b' % k, '@foo-%d@' % k, s)
    
    # got: result == 'dasds @foo-12@gfd9843'
    assert result == 'dasds @foo-12@ gfd9843', result
    
    
    k = 1 # only substitute entire "foo-1" occurrences
    result = re.sub(r'foo-%d\b' % k, '@foo-%d@' % k, s)
    assert result == 'dasds foo-12 gfd9843', result
    

    【讨论】:

    • 不确定\b 的作用,但+ 不起作用。查看我添加的测试用例。
    • @orange sry + 不需要...立即尝试
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    相关资源
    最近更新 更多