【问题标题】:Regex to get words or series of words that start with a capital letter正则表达式获取以大写字母开头的单词或单词系列
【发布时间】:2015-03-26 20:17:48
【问题描述】:

我想获取所有以大写字母开头的单词,还想获取以大写字母开头的连续单词组。

例如在句子中,

奥巴马在华盛顿告诉记者,他和内塔尼亚胡是反对的 伊朗呼吁“美国去死”

我想得到

[Obama, Washington, Netanyahu, Iran's, Death To America]

我试过了

([A-Z][a-z]*\s)+

意思是一个`大写字母后跟任意数量的小写字母后跟一个空格,任意次数。

我虽然这会工作,但它没有。有什么建议吗?

【问题讨论】:

  • 为什么Death to America 满足您的标准?
  • 你在用pcre吗?
  • 解释一下 > 还有一组连续的单词,每个单词都以大写字母开头。
  • 你用的是什么正则表达式?

标签: regex


【解决方案1】:

Iran's 不匹配 [A-Z][a-z];在你的集合中添加'

Death To America 不完全匹配,因为最后一个单词后面没有空格。

两者都由

([A-Z][a-z']*)(\s[A-Z][a-z']*)*

你没有不以大写开头但中间有一个的单词;如果您想忽略这些,请使用分词:

\b([A-Z][a-z']*)(\s[A-Z][a-z']*)*\b

【讨论】:

    【解决方案2】:

    您可以使用重复“零次或多次”次的可选组来修改正则表达式。

    [A-Z][a-z']+(?: [A-Z][a-z]+)*
    

    Live Demo

    【讨论】:

    • 如果你想让它匹配单个大写字母,只需将第一个+更改为* ...
    【解决方案3】:

    假设你更喜欢最长匹配,那么

    ([A-Z][\w']*(?:\s+[A-Z][\w']*)*)
    

    使用g 申请,应该得到所有分组。

    [A-Z][\w']*
    

    匹配您想要匹配的单个单词。

    然后

    (?:\s+[A-Z][\w']*)*
    

    将匹配任意数量的此类单词序列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 2011-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多