以“词”拆分句子,将多个大写词(假定为专有名词)视为一个

Split sentence by “words”, treating multiple capital words (assumed to be proper nouns) as one

我正在尝试拆分一个字符串,其中多词专有名词被识别为一个标记。比如下面的代码需要改,

import re

s = 'Multi-Criteria Decision Making (MCDM) is increasingly used in RE projects.'
out = re.compile("\s").split(s)

print(out)

为了得到这个想要的结果:

['Multi-Criteria Decision Making', 'MCDM', 'is', 'increasingly', 'used', 'in', 'RE', 'projects']

我找到了 this,但我无法将它正确地合并到代码中。

提前致谢!

您可以匹配以大写字符开头,后跟 1 个以上小写字符,中间有 space 或 - 的连续单词,以获得 [= 的单个匹配项35=] 决策.

要匹配其他单词,您可以使用交替|来匹配1个或多个单词字符。

[A-Z][a-z]+(?:[ -][A-Z][a-z]+)*|\w+

Regex demo


如果后面的部分在括号之间有 2 个或更多大写字符,则可以使用正向先行。

请注意,先行检查仅检查是否存在大写字符,它不会匹配前面单词中完全相同的大写字符。

[A-Z][a-z]+(?:[ -][A-Z][a-z]+)+(?= \([A-Z]{2,}\))|\w+

Regex demo | Python demo

import re
 
s = 'Multi-Criteria Decision Making (MCDM) is increasingly used in RE projects.'
pattern = r'[A-Z][a-z]+(?:[ -][A-Z][a-z]+)+(?= \([A-Z]{2,}\))|\w+'
print(re.findall(pattern, s))

输出

['Multi-Criteria Decision Making', 'MCDM', 'is', 'increasingly', 'used', 'in', 'RE', 'projects']