正则表达式从段落中分别提取 header 和文本

Regex extract header and text separately from a paragraph

我想把 header 和它对应的文本分开,用定界符 colon 与段落分开。

示例段落, “事件:快狐 运行 过去了。一架飞机撞到了头。结果与结论:我头疼,还发烧”

我期望的输出:[('INCIDENTS', 'Quick fox ran over. A plane drove the head'), ('RESULT AND CONCLUSION', 'I got headache, and fever')]

我正在使用 python 并尝试使用 re.findall(r'([A-Z]+:)(.*?)\.', <paragraph>)。但是我没有得到预期的输出。

感谢任何帮助......

您可以使用

re.findall(r'\b([A-Z]+(?:\s+[A-Z]+)*):\s*(.*?)(?=\s*\b(?:[A-Z]+(?:\s+[A-Z]+)*):|$)', text)

regex demo

详情

  • \b - 字边界
  • ([A-Z]+(?:\s+[A-Z]+)*) - 第 1 组:一个大写单词,然后是零个或多个 whitespace-separated 个大写单词
  • : - 冒号
  • \s* - 0 个或更多空格
  • (.*?) - 第 2 组:尽可能少的任何零个或多个字符
  • (?=\s*\b(?:[A-Z]+(?:\s+[A-Z]+)*):|$) - 最多 0 个或多个空格、一个单词边界、一个大写单词,然后是零个或多个 whitespace-separated 个大写单词或字符串结尾。