临床试验领域的Python正则表达式

2024-05-23 15:49:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将临床试验的文本分割成一个字段列表。下面是一个例子doc: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与regex一起使用。你知道吗

我可以通过使用re.findall(r"\n\n[^\s]", text)查找第一个字符来添加回第一个字符,但这需要对整个文本进行第二次迭代(看起来很笨拙)。你知道吗

我认为将re.findall与一些匹配所有字段的regex一起使用是有意义的,但是我被卡住了。re.findall(r"[^\s].+\n\n")只匹配单行字段。你知道吗

我对正则表达式不是很有经验,所以如果这个问题的答案在别处很容易找到,我很抱歉。谢谢你的帮助!你知道吗


Tags: texthttpscore文本re列表doc字符
2条回答

你要向前看。您还可能希望它在新行数/新行字符数方面更加灵活。你可以试试这个:

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

虽然这似乎会在列表中插入\r\n个字符。。。嗯

您可以使用正向先行而不是否定的字符类:

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

现在,如果后跟一个非空白字符,它将只匹配2个换行符。你知道吗

另外,如果可能有2行或更多的换行符,最好使用{2,}限制量词:

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

参见Python demoregex demo。你知道吗

相关问题 更多 >