我正在尝试将临床试验文本分成一系列字段。以下是一个示例文档:https://obazuretest.blob.core.windows.net/stackoverflowquestion/NCT00000113.txt。所需的输出格式为:[[Date:<date>],[URL:<url>],[Org Study ID:<id>],...,[Keywords:<keywords>]]
我使用re.split(r"\n\n[^\s]", text)
拆分以空格以外的字符开头的段落(以避免在字段内的缩进段落中拆分)。这一切都很好,除了结果字段都是(第一个字段除外)缺少第一个字符。不幸的是,无法将string.partition
与正则表达式一起使用。
我可以通过使用re.findall(r"\n\n[^\s]", text)
找到它们来添加第一个字符,但这需要在整个文本中进行第二次迭代(并且看起来很笨拙)。
我认为将re.findall
与一些匹配所有字段的正则表达式一起使用是有道理的,但我会陷入困境。 re.findall(r"[^\s].+\n\n")
仅匹配单行字段。
我对正则表达式不太熟悉,所以如果在其他地方很容易找到这个问题的答案我会道歉。谢谢你的帮助!
答案 0 :(得分:2)
你可以使用积极的先行而不是否定的字符类:
re.split(r"\n\n(?=\S)", text)
现在,如果后面跟着一个非空白字符,它只会匹配2个换行符。
此外,如果可能有2个或更多新行,您最好使用{2,}
限制量词:
re.split(r"\n{2,}(?=\S)", text)
答案 1 :(得分:0)
你想要前瞻。您也可能希望它更灵活,只要有多少换行符/换行符。你可以试试这个:
import re
r = re.compile(r"""(\r\n|\r|\n)+(?=\S)""")
l = r.split(text)
虽然这似乎将\ r \ n字符插入列表中......嗯。