【问题标题】:Regex Code for getting only words in title case from a paragraph用于从段落中仅获取标题大小写中的单词的正则表达式代码
【发布时间】:2017-08-02 04:40:53
【问题描述】:

我正在寻找一个正则表达式,它只返回给定句子或段落中标题大小写(只有第一个字母大写)的单词。

如果段落是:

France’s last serious attempt at ambitious economic reform, an overhaul of pensions and social security, was in the mid-1990s under President Jacques Chirac.

我希望它匹配 FrancePresidentJacquesChirac

(我正在使用 Python 3 编写)

【问题讨论】:

  • 只有Unicode还是ASCII?您使用的是哪种语言/工具?
  • 使用 Python 3,UTF-8。

标签: regex


【解决方案1】:

要处理任何语言字母,请使用 unicode 属性:

re.findall(r"\b\p{Lu}\p{Ll}+", inputLine)

在哪里

  • \p{Lu} 代表任何语言的任何大写字母
  • \p{Ll} 代表任何语言的任何小写字母

【讨论】:

    【解决方案2】:

    使用单词边界,一个大写字母,然后是多个小写字母,如下所示:

    \b[A-Z][a-z]+
    

    像这样:

    titleWords = re.findall(r"\b[A-Z][a-z]+", line)
    

    live demo

    请注意,+(至少 1)优于 *(0 或更多),因此您不能匹配单大写字母单词,例如 "I""A"

    单词边界不是必需的,但可以防止匹配驼峰式单词,例如 "mySpace",这在常规文本中无论如何都不应该出现,因此您可以删除 \b 而不会产生不良影响。

    【讨论】:

      【解决方案3】:

      根据正则表达式的风格,结果可能会有所不同。

      对于 PCRE,我建议:

      /\b[A-Z][a-z]*\b/
      

      【讨论】:

      • 来自France'sFrance 怎么样?
      • 刚刚检查过,它有效。 \b 是“字边框”,' 似乎被认为是
      • 我在RegExr 上测试过它似乎只匹配第一个单词。我是不是做错了什么?
      • 去掉括号:你不需要它们。整场比赛都是目标
      • @john 您需要将g 添加到末尾(“全局”标志)以匹配所有出现,即/\b[A-Z][a-z]+/g
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-11
      • 2017-04-25
      • 2011-04-06
      相关资源
      最近更新 更多