(这是我之前问过的一个问题。
我正在尝试为 LibreOffice Writer 设计一个 RegEx,以便查找我的博士论文中的所有缩写。目前我有以下内容:
\b(?:[A-Z]){2,}
这几乎可以完成工作,因为它识别了所有以一个以上大写字母开头的单词。但是,我有一些缩写它没有捕捉到,即:
CoE RoR RoC
理想情况下,我想要一个 RegEx 来识别所有至少有两个大写字母的单词,但它们不必位于单词的开头。但我在尝试创建它时不知所措。有人能给我指明正确的方向吗?
答案1
我对这个问题的解释与 Jim K 略有不同。假设所有缩写都以大写字母开头,并且至少包含一个大写字母任何地方在单词中,您不必在现有的正则表达式中添加太多内容:
\b(?:[A-Z][a-z]*){2,}
大写字母与任意数量的小写字母配对,有效地消除了单词中大写字母之间的空格。至少有两对这样的配对意味着至少有两个大写字母。
如果缩写必须包含至少两个大写字母但不必以一个大写字母开头,请在大写字母检查前添加一个额外的小写字母检查:
\b(?:[a-z]*[A-Z][a-z]*){2,}
这两项都根据 Jim 的测试文本进行了测试。(谢谢,吉姆!)
答案2
这个表达式并不能找到所有的可能性,但是它应该能找到你要找的东西:
\b(?:[A-Z]{2}[:alpha:]*)|(?:[A-Z][a-z][A-Z][:alpha:]*)
因此对于本文来说:
EULEX CFSP OJ CAbc cAB cAb cab Cab CabC CFSP OJ CFSP OJ EULEX EULEX EU EU
CoE RoR RoC
它找到除 之外的所有单词cAB cAb cab Cab CabC
,我认为这些单词不应被视为缩写。
表达式分解:
\b
是词语边界。(?:[A-Z]{2}[:alpha:]*)
接受所有以两个大写字母开头的单词。[:alpha:]*
通过接受任何字母(无论大写还是小写)来匹配单词的其余部分。
|
如果第一个表达式不匹配,“或”则尝试下一个表达式。(?:[A-Z][a-z][A-Z][:alpha:]*)
接受所有以 upper、lower、upper 开头的单词。