re.sub()通过多行替换

时间:2019-06-25 08:10:00

标签: python regex

我想在“)”和“ String”之间替换文本,并在输出中包括标识符,如果所需文本在一行中,则我的代码可以工作,但对于多行则不起作用。

import re

s = """
 text1) text2 
 TEXT3 text4

    """


if re.findall(r'(?<=\))\s.*(.*?)(?=\s*TEXT3)',s,re.S):
            test= re.sub(r'(?<=\))\s.*(?=\bTEXT3)',' ',s)
            print(test)
else:
  print("Not Found")

我所需的输出是这样:

text1) TEXT3 text4

2 个答案:

答案 0 :(得分:1)

优化方法:

模式\)[^)]+(?=\bTEXT3)(?<=\))(.*?)(?=\bTEXT3)的性能更好。

import re

s = """
 text1) text2 
 TEXT3 text4

    """

res = re.sub(r'\)[^)]+(?=\bTEXT3)', ') ', s, re.M)
print(res)

输出:

text1) TEXT3 text4

答案 1 :(得分:0)

使用flags=re.MULTILINE|re.DOTALL

例如:

import re

s = """
text1) text2 
TEXT3 text4
   """

test= re.sub(r'(?<=\))(.*?)(?=\bTEXT3)',' ',s, flags=re.MULTILINE|re.DOTALL)
print(test) #text1) TEXT3 text4