我正在寻找一个正则表达式命令来匹配只有2个字母'a'或'A'的单词。单个'a'是可以的,但是当单词包含3个或更多'a'时,它们的错误。
G AA SSCC - 好的
EAAASCS - 坏的
AAASD AA - 糟糕
ASBS AA - 好
答案 0 :(得分:1)
在匹配每个单个字符之前检查aaa
的not。这可以通过否定先行断言来完成。
String line[] = {"GAASSCC", "EAAASCS", "AAASDAA", "ASBSAA" };
for (String i : line)
if(i.matches("(?i)^(?:(?!aaa).)*?(?<!a)aa(?!a).*"))
{
System.out.println(i +" -> Good");
}
else
{
System.out.println(i +" -> Bad");
}
<强>输出:强>
GAASSCC -> Good
EAAASCS -> Bad
AAASDAA -> Bad
ASBSAA -> Good
<强>解释强>
(?i)
称为不区分大小写的修饰符。这使正则表达式匹配大写和小写字母。
^
断言我们刚开始。
(?:(?!aaa).)*?
这是棘手的部分。首先检查aaa
的不是a
。如果没有a
后面跟着两个(?<!a)
个字符,那么只会匹配相应的字符。
a
这声明了我们要匹配的字符串,后面跟一个字符aa
aa
匹配字符串(?!a)
a
否定前瞻,声称匹配后面跟着字符{{1}}
答案 1 :(得分:0)
您可以使用以下内容过滤掉连续至少3个A的所有字词:
\b\w*[aA]{3,}\w*\b
说明:
\b
:字边界。基本上,一个单词的开头或结尾。
\w*
:任意数量的字母。零或更多。
[aA]
:a或A
{3,}
:前一个元素([aA]
)
因此,这会找到连续至少有三个A的所有单词,并被任意数量的其他字母包围。
如果您想要按顺序查找包含一个或两个A的单词,则可以将上述内容修改为\b\w*[aA]{1, 2}\w*\b
。事实上,你也可以使用\b\w*[aA]+\w*\b
,因为你已经过滤掉了三个或更多A的单词。
答案 2 :(得分:0)
也许这会奏效:
[^aA]*[aA]{2}[^aA]*