用于临床试验领域的Python Regex

时间:2017-04-22 21:59:23

标签: python regex text

我正在尝试将临床试验文本分成一系列字段。以下是一个示例文档: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")仅匹配单行字段。

我对正则表达式不太熟悉,所以如果在其他地方很容易找到这个问题的答案我会道歉。谢谢你的帮助!

2 个答案:

答案 0 :(得分:2)

你可以使用积极的先行而不是否定的字符类:

re.split(r"\n\n(?=\S)", text)

现在,如果后面跟着一个非空白字符,它只会匹配2个换行符。

此外,如果可能有2个或更多新行,您最好使用{2,}限制量词:

re.split(r"\n{2,}(?=\S)", text)

请参阅Python demoregex demo

答案 1 :(得分:0)

你想要前瞻。您也可能希望它更灵活,只要有多少换行符/换行符。你可以试试这个:

import re
r = re.compile(r"""(\r\n|\r|\n)+(?=\S)""")
l = r.split(text)

虽然这似乎将\ r \ n字符插入列表中......嗯。