我希望匹配在“用户”这个词之前将每个第一个字母大写的词组。
例如:
我有一个字符串到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
但它只匹配第一个单词 - 平板电脑
答案 0 :(得分:1)
这只是正确分组的问题:
((?:(?-i)[A-Z][a-z]* )*)users
如果您不想获取捕获中的最后一个空格,也许可以这样做:
((?:(?-i)[A-Z][a-z]* ??)*?)\s*users
(((?-i)[A-Z][a-z]*) )*
^^----------------^ ^
|_________1_________|
2
第一个(内部)捕获处理单词,第二个(外部)捕获处理空间。您可以轻松地将两者合并为一个组(因此,为什么在我的正则表达式中找到(?:(?-i)[A-Z][a-z]* )
。
然后问题是最后一次捕获正在重复,这就是导致在第一个捕获组中仅捕获Tablet
的原因。比较我建议的正则表达式中最终捕获组的重复方式。
答案 1 :(得分:1)
答案 2 :(得分:0)
这应该有效
(([A-Z]+[\w-]*[\s])+users)