re.sub () заменить между несколькими строками - PullRequest
1 голос
/ 25 июня 2019

Я хочу заменить текст между ")" и "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 ]

1 голос
/ 25 июня 2019

Оптимизированный подход:

Шаблон \)[^)]+(?=\bTEXT3) более производительный, чем (?<=\))(.*?)(?=\bTEXT3).

import re

s = """
 text1) text2 
 TEXT3 text4

    """

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

Выход:

text1) TEXT3 text4
0 голосов
/ 25 июня 2019

Использование flags=re.MULTILINE|re.DOTALL

Ex:

import re

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

test= re.sub(r'(?<=\))(.*?)(?=\bTEXT3)',' ',s, flags=re.MULTILINE|re.DOTALL)
print(test) #text1) TEXT3 text4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...