使用Regex在Python中更改两个字符串之间的文本

时间:2014-07-03 15:55:32

标签: python regex

我发现了几个类似的问题,但我无法解决任何问题。我尝试在文本中的两个其他字符串之间查找并替换字符串。

reg = "%s(.*?)%s" % (str1,str2)
r = re.compile(reg,re.DOTALL)
result = r.sub(newstring, originaltext)

问题是上面的代码也替换了str1str2,而我只想替换它们之间的文本。显然我想念的东西?

更新

我简化了例子:

text = 'abcdefghijklmnopqrstuvwxyz'

str1 = 'gh'
str2 = 'op'

newstring = 'stackexchange'

reg = "%s(.*?)%s" % (str1,str2)
r = re.compile(reg,re.DOTALL)
result = r.sub(newstring, text)

print result

结果为abcdefstackexchangeqrstuvwxyz,而我需要abcdefghstackexchangeopqrstuvwxyz

1 个答案:

答案 0 :(得分:5)

在正则表达式中使用lookarounds的组合。

reg = "(?<=%s).*?(?=%s)" % (str1,str2)

<强>解释

Lookarounds是零宽度断言。他们不会消耗字符串上的任何字符。

(?<=    # look behind to see if there is:
  gh    #   'gh'
)       # end of look-behind
.*?     # any character except \n (0 or more times)
(?=     # look ahead to see if there is:
  op    #   'op'
)       # end of look-ahead

Working Demo