繁体   English   中英

使用正则表达式的 Select 大写和全大写单词

[英]Select capitalized & all-caps words using RegEx

我正在尝试在大量文本中查找人员和公司的名称(所有大写但不在句子开头的名称)。 目的是找到尽可能多的实例,以便可以正确地对它们进行 XML 标记。

到目前为止,这是我想出的:

[^\W](\s\b[\p{Lu}][\p{Lu}|\p{Ll}]+\b)+

它有两个问题:

  1. 它在命中前选择了太多的两个字符。 在句子“这甲虫丑吗?” 它找到了使后续标记复杂化的甲虫
  2. 如果大写单词前面带有撇号或冒号,则找不到。 如果可能的话,我想将用于确定句子的字符限制为仅?..

这是我用来测试它的示例文本:

约翰亚当斯是我的英雄。 他的想象力没有极限? 这只甲壳虫丑吗:它唱歌。 拉 Scala 歌剧院。 我有一个梦想,我会在 Frame Store 找到工作,而不是在美国。 这样,ILM 就可以为所欲为。 ILM 非常甜蜜。 视觉效果做得很好。? Animatronix 也没有?

我正在使用 jEdit http.//jedit.org 因为我需要一些适用于 Windows 和 OS X 的东西。

更新,这现在避免了字符串开头的匹配。

(?<!(?:[!?\.]\s|^))(\b[\p{Lu}][\p{Lu}\p{Ll}]+\b)+

(?<?(:?[.?\.]\s|^))是一种否定的后视,确保它前面没有?..和空格或新行的开头。

我用jEdit对其进行了测试。

更新以涵盖由多个单词组成的名称

(?<!(?:[!?\.]\s|^))(\b[\p{Lu}][\p{Lu}\p{Ll}]*\b(?:\s\b[\p{Lu}][\p{Lu}\p{Ll}]*\b)*)+
                                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ (added)
                                            ^ (changed)

我添加了组(?:\s\b[\p{Lu}][\p{Lu}\p{Ll}]*\b)*以匹配以大写字母开头的可选以下单词。 我将+更改为*以匹配您示例中的A My company's called A Few Good Men 但是这种变化现在导致正则表达式匹配I作为名称。

见 tchrists 评论。 名称不是一件简单的事情,如果你想涵盖更复杂的情况,它会变得非常困难。

这也有效

(?<!\p{P}\s)(\b[\p{Lu}][\p{Lu}|\p{Ll}]+\b)+

但是\p{P}涵盖了所有标点符号,我知道这不是您想要的。 但也许您可以在regular-expressions.info/unicode.html上找到适合您需求的属性。

您表达中的另一个错误是| 在字符 class 中。 它不需要,您只需将此字符添加到您的 class 中,它将匹配U|S|A之类的单词,因此只需将其删除:

(?<![!?\.]\s)(\b[\p{Lu}][\p{Lu}\p{Ll}]+\b)+

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM