如何编写正则表达式来捕获字符串中没有US作为前两个字符的字符串?对于例如CA some text
。此字符串应与正则表达式匹配,因为它没有US作为前两个字符。但US some text
不应与正则表达式匹配。
^(\w{2})(.*?)$
是我开始的......但我想将美国排除在前2个字符之外。
答案 0 :(得分:4)
这是写作的一种方式:
^([^U]|U[^S]).*$
这意味着第一个字符不是'U'
,或者第一个字符是'U'
,那么第二个字符不能是'S'
。
答案 1 :(得分:3)
只需添加否定前瞻:
^(?!US\b)(\w{2})(.*)$
(问号在这里没用,因为之后有模式结束)
如果您只想捕获特定组中的所有文本而不是国家/地区:
^(?!US\b).*$
(别忘了加倍反斜杠)
答案 2 :(得分:1)
人们经常想要匹配否定。而是测试肯定匹配,然后你的if分支是失败分支。例如。
if(str.matches('^US.*$')){
// fail
// or
// str.substring(2)
} else {
//pass
}
编写和维护更容易