Удаление Wordwraps в Python с помощью регулярного выражения - PullRequest
0 голосов
/ 13 июля 2020

Я хочу удалить указанные c Переносы слов в файле.

Файл выглядит так:

<Text>
<TextNr>0</TextNr>
<TextStr>AckReq</TextStr>
</Text>
<Text>
<TextNr>1</TextNr>
<TextStr>AckReq</TextStr>
</Text>

И после удаления функции Wordwrap он должен быть:

<Text><TextNr>0</TextNr><TextStr>AckTra</TextStr></Text>
<Text><TextNr>1</TextNr><TextStr>AckReq</TextStr></Text>

Итак, после <Text> он должен удалить все Wordwraps до </Text>, и там он должен создать новую строку. Как я могу удалить Wordwraps с помощью регулярного выражения?

Regex выглядит примерно так:

r'<Text>[\r\n]+<TextNr>(\d+)</TextNr>[\r\n]+<TextStr>(\w+)</TextStr>[\r\n]+</Text>[\r\n]+'

1 Ответ

1 голос
/ 13 июля 2020

Вам просто нужен \n(?!<Text>), хотя, как @PiRocks упомянул в комментариях, это может быстро стать опасным, если ваш XML станет еще более сложным.

import re

text = """<Text>
<TextNr>0</TextNr>
<TextStr>AckReq</TextStr>
</Text>
<Text>
<TextNr>1</TextNr>
<TextStr>AckReq</TextStr>
</Text>"""

text = re.sub(r"\n(?!<Text>)", "", text)
print(text)

Вывод:

<Text><TextNr>0</TextNr><TextStr>AckReq</TextStr></Text>
<Text><TextNr>1</TextNr><TextStr>AckReq</TextStr></Text>

Демо

...