Python re.sub не заменяет новую строку - PullRequest
1 голос
/ 28 мая 2020

У меня есть такой текст:

<Row 1 Having A Text>
<Row 2 Having B Text>
<Row 3 Having C Text>

Я пытаюсь полностью удалить и сдвинуть вверх.

Я пытался использовать это:

for line in fileinput.input(new_name, inplace=True): 
print (re.sub(r'<Row 2.*[\r\n]*', '', line.strip()))

Однако это просто приводит к следующему:

<Row 1 Having A Text>

<Row 3 Having C Text>

И строка 3 не перемещается вверх. Что мне здесь не хватает?

Ответы [ 2 ]

3 голосов
/ 28 мая 2020

Ваша проблема в том, что даже если ваше регулярное выражение соответствует и заменяет содержимое line пустой строкой (''), print('') выводит пустую строку. Вместо того, чтобы печатать каждую строку, напечатайте только те строки, которые не начинаются с <Row 2

for line in fileinput.input(new_name, inplace=True): 
    if not line.strip().startswith('<Row 2'):
        print(line)
0 голосов
/ 28 мая 2020

print() выводит LF, даже если содержимое пустое, поэтому вы заменяете 'Row 2' пустой строкой, но, поскольку вы все еще используете print, вы получаете пустую строку на выходе.

Вы можете проверить наличие пустой строки:

for line in fileinput.input(new_name, inplace=True): 
    output = re.sub(r'<Row 2.*[\r\n]*', '', line.strip())
    if len(output) :
        print(output)
...