使用正则表达式替换特定匹配项

时间:2016-05-29 16:57:49

标签: python regex

我想使用正则表达式执行替换,不是针对所有匹配,而是针对特定匹配。但是,re.sub代替所有匹配。我怎么能这样做?

这是一个例子。 说,我有一个包含以下内容的字符串:

FOO=foo1
BAR=bar1
FOO=foo2
BAR=bar2
BAR=bar3

我想做的是:

re.sub(r'^BAR', '#BAR', s, index=[1,2], flags=re.MULTILINE)

获得以下结果。

FOO=foo1
BAR=bar1
FOO=foo2
#BAR=bar2
#BAR=bar3

2 个答案:

答案 0 :(得分:3)

您可以将替换函数传递给跟踪计数的remove_filter('get_the_excerpt', 'wp_trim_excerpt'); add_filter('get_the_excerpt', 'wpse_custom_wp_trim_excerpt'); function wpse_excerpt_length( $length ) { return 40; } add_filter( 'excerpt_length', 'wpse_excerpt_length', 999 ); 并检查是否应该替换给定的索引:

re.sub

输出:

import re

s = '''FOO=foo1
BAR=bar1
FOO=foo2
BAR=bar2
BAR=bar3'''

i = 0
index = {1, 2}

def repl(x):
    global i
    if i in index:
        res = '#' + x.group(0)
    else:
        res = x.group(0)

    i += 1
    return res

print re.sub(r'^BAR', repl, s, flags=re.MULTILINE)

答案 1 :(得分:0)

你可以

  1. 使用s.splitlines()
  2. 拆分字符串
  3. 迭代for循环中的各个行
  4. 跟踪到目前为止找到的匹配数
  5. 仅对您想要的数字范围内的匹配项执行替换(例如匹配1和2)
  6. 然后将它们连接成一个字符串(如果需要)。