【问题标题】:Regex that selects everything after first consecutive capitalized words在第一个连续大写单词之后选择所有内容的正则表达式
【发布时间】:2013-09-14 13:11:07
【问题描述】:

我想选择前几个连续大写单词之后的所有内容。即:

Terry Smith is a good school teacher. She works tirelessly.

会变成;

is a good school teacher. She works tirelessly.

到目前为止,这不起作用;

(^[A-Z][a-z]+(?=\s[A-Z])(?:\s[A-Z][a-z]+)+)([\s\S]*)

我在 Drupal 的提要篡改插件中使用“查找替换正则表达式”功能,以便用空格替换“Terry Smith”之后的所有内容。

【问题讨论】:

  • 你的正则表达式基本没问题,虽然前瞻部分是多余的,可以省略。真正的问题是你打算如何使用它。

标签: regex drupal-7 drupal-feeds


【解决方案1】:

下面的表达式匹配句首所有连续的大写单词。

^(?:(?:[A-Z][a-z]+)(?>\s*))+

Regex101 Demo

如果您想从 setnence 中删除该部分,那么您所要做的就是将其替换为空字符串。

如果要替换后面的部分,可以使用以下表达式:

^((?:(?:[A-Z][a-z]+)(?>\s*))+)([\s\S]+)

并使用替换字符串$1 或您的语言中用于引用第一个捕获的组的任何内容。

Regex101 Demo

【讨论】:

    【解决方案2】:

    这将找到大写的单词:

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

    您可能希望在[a-z] 之后将+ 替换为* 以匹配单字符大写单词。

    要获取字符串开头的所有大写单词,请在其周围添加^()+

    ^([A-Z][a-z]+(?=\b)\s*)+
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-29
      • 1970-01-01
      • 2016-04-05
      • 1970-01-01
      • 1970-01-01
      • 2018-12-21
      相关资源
      最近更新 更多