匹配首字母大写的短语

时间:2013-09-20 04:39:42

标签: regex

我希望匹配在“用户”这个词之前将每个第一个字母大写的词组。

例如:

我有一个字符串到Apple Tablet用户或Apple Tablet用户的任何内容

匹配后的结果必须是: Apple Table

any-without-first-char-capitalized-here Abc users => ABC

any-without-first-char-capitalized-here Abc Def users => Abc Def

any-without-first-char-capitalized-here Abc Def Xyz users => Abc Def Xyz

我尝试了什么:(((?-i)[A-Z][a-z]*) )*users 但它只匹配第一个单词 - 平板电脑

3 个答案:

答案 0 :(得分:1)

这只是正确分组的问题:

((?:(?-i)[A-Z][a-z]* )*)users

如果您不想获取捕获中的最后一个空格,也许可以这样做:

((?:(?-i)[A-Z][a-z]* ??)*?)\s*users

regex101 demo


(((?-i)[A-Z][a-z]*) )*
^^----------------^ ^
|_________1_________|
          2

第一个(内部)捕获处理单词,第二个(外部)捕获处理空间。您可以轻松地将两者合并为一个组(因此,为什么在我的正则表达式中找到(?:(?-i)[A-Z][a-z]* )

然后问题是最后一次捕获正在重复,这就是导致在第一个捕获组中仅捕获Tablet的原因。比较我建议的正则表达式中最终捕获组的重复方式。

答案 1 :(得分:1)

您可以使用量化来匹配多个大写单词。然后使用预先查找用户但不在结果中包含它。

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

REY

REY有一个包含所有样本数据的工作示例。

答案 2 :(得分:0)

这应该有效

(([A-Z]+[\w-]*[\s])+users)

Matches are below

Explanation here