use*_*276 5 c# regex regex-lookarounds
使用 C# .Net 4.5 工作
我需要一个表达式,该表达式将遍历字符串,如果字符串在字符串中的任何位置有两个或多个大写字符,则匹配失败。
我认为正确的模式应该是这样的:
(?![A-Z]{2,})\w
Run Code Online (Sandbox Code Playgroud)
注意:尝试了?!两者?<!
我得到了相反的工作,搜索一个字符串,如果连续有 2 个或更多大写字母,则返回 true,并且该模式如下:
(?=[A-Z]{2,})\w
Run Code Online (Sandbox Code Playgroud)
但我必须摆脱消极的前瞻模式。
从我读过的所有帖子来看,这应该是正确的方法,但它对我不起作用。
我读过以下问题:
ETC...
我不想把它们全部列出来。但他们都说或多或少相同的事情,只是使用否定前瞻(?!)
任何人都可以看到我做错了什么而无法正常工作吗?
编辑:
添加了一些示例:
进阶版:
您可以使用以下正则表达式:
^(?!.*\b\w*\p{Lu}\w*\p{Lu}).*$
Run Code Online (Sandbox Code Playgroud)
请参阅正则表达式演示
它也将匹配空字符串,但您可以使用+量词而不是*要求至少 1 个字符。
要将换行符与此模式匹配,您需要使用RegexOptions.Singleline修饰符。
(?!.*\b\w*\p{Lu}\w*\p{Lu})一旦发现以零个或多个单词字符开头,后跟一个大写字母,再后跟零个或多个单词字符,然后又是一个大写字母的单词,锚定在字符串开头的负向前查找将使匹配失败。您可以使用限制量词来缩短它:^(?!.*\b(?:\w*\p{Lu}){2}).*$。