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

Python 用“拆分句子;单词”;,将多个大写词(假定为专有名词)视为一个,python,regex,re,Python,Regex,Re,我试图拆分一个字符串,其中多词专有名词被识别为一个标记。例如,以下代码需要更改 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', 'in

我试图拆分一个字符串,其中多词专有名词被识别为一个标记。例如,以下代码需要更改

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']
我已经找到了,但我无法将其正确地合并到代码中


提前谢谢

您可以匹配以大写字符开头的连续单词,后跟1+小写字符,中间有空格或
-
,以获得多标准决策的单个匹配

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

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


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

请注意,前瞻只检查是否存在大写字符,它与前面单词中完全相同的大写字符不匹配

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

输出

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

您可以获得匹配项,而不是拆分
[A-Z][A-Z]+(?:[-][A-Z][A-Z]+)+(?=\([A-Z]{2,}\)|\w+/code>,但这是基于前面单词中重复出现的大写字符以及括号内仅出现大写字符。看,也许会更安全。基于@WiktorStribiżew Yes,使用backreference至少匹配第一个大写字符确实会更安全一些。很好的解决方案:-)++
['Multi-Criteria Decision Making', 'MCDM', 'is', 'increasingly', 'used', 'in', 'RE', 'projects']