我想将文本文档拆分为两个新行字符:
# document example
field1: content asd..\n\nfield2: content qwe...\n\nfield3: content asfdqegt
但有时字段的内容中包含新行字符(请参见字段2):
field1: content asd..\n\nfield2: content\n\nqwe...\n\nfield3: content asfdqegt
因此,我不能使用\n\n
作为分隔符
实际行为:
s = "field1: content asd..\n\nfield2: content\n\nqwe...\n\nfield3: content asfdqegt"
s.split("\n\n")
['field1: content asd..',
'field2: content',
'qwe...',
'field3: content asfdqegt']
预期输出(需要替换field2:
和field3:
之间的\n\n
,而不是文档中的所有\n\n
):
s.split("\n\n")
['field1: content asd..', 'field2: contentqwe...', 'field3: content asfdqegt']
我的尝试:
import re
re.sub(r"(?<=field1: )(\n)(?<=field3: )", "", s) # does nothing
re.sub(r"\n", "", s) # replaces all \n, not just between field2 and field3
如果您的字段标识符始终为“fieldX”,您也可以使用它进行拆分:
你可以用
见online demo。另见regex demo
\n\n(?=\w+:)
模式匹配两个LF字符,紧接着是一个或多个单词字符,然后是一个:
字符。使用此模式拆分字符串后,将使用.replace('\n', '')
从每个块中删除任何LF char您可以在字段之间进行匹配,并替换匹配中的换行符
^
字符串的开头field\d+:.*
匹配字段后跟1+位数,:
和行的其余部分(?:
非捕获组作为一个整体重复\n
匹配换行符(?!field\d+:)
断言字符串不以字段模式开头.*
如果断言为true,则匹配整行)*
关闭该组并可选地重复例如
输出
见regex demo和Python demo
相关问题 更多 >
编程相关推荐