我正在使用正则表达式解决问题,在该表达式中,我需要找到一个句子中具有至少3个特定字符的所有单词。假设我有以下数据:
定义一种模式,用于选择所有至少包含字符a
三倍的单词(包括其大写变体A
)。
测试的例句是:
Anastasia想把香蕉劈开。
所以我要做的是,我已经整理了所有可能遇到的情况:
到目前为止,我已经针对第四种情况和第六种情况使用管道编写了正则表达式,并且适用于给定的文本。
"\\b(\\b[Aa]{1}[^Aa\\W\\s]*[Aa]{1}[^Aa]*[Aa]{1,}\\w*\\b)|(\\b[^Aa\\W]*[Aa]{1}[^Aa\\W]*[Aa]{1}[^Aa\\W]*[Aa]{1,}\\w*\\b)"
答案 0 :(得分:1)
这看起来很令人费解。我认为从单词边界开始并重复包含3个字符(零个或多个非A,非空格字符,后跟单个A字符)的组会更快更容易,然后再添加更多字符,直到您进入下一个空间:
\b(?:[^a ]*a){3}\w*
https://regex101.com/r/ZVxATc/2
(当然,请确保使用不区分大小写的标志,这样您就不必拼写[aA]
之类的内容了)
答案 1 :(得分:0)
/^([^a]*a){3}[^a]*$/
怎么样。
这将在一个字符串中恰好找到3个a
字符。
可以在 here 上看到它运行,我在下面添加了一些测试字符串:
const regex = /^([^a]*a){3}[^a]*$/;
const strings = ['abcabcabc', 'abcabc', 'abcabcabcabc', 'aaa', 'abab', 'ababa', 'a a a', 'a ba ba', 'a ab ab', 'a ab ab ab', 'b ab ab ab'];
for (let i = 0; i < strings.length; i++) {
console.log(strings[i] + ": " + regex.test(strings[i]));
}
答案 2 :(得分:0)
这是一个使用前瞻性的解决方案:
\b(?=([^ ]*a){3,})\w*\b
它从word boundary,
开始,然后创建一个前瞻检查:
零个或多个非空格字符,后跟'a'
。重复3次以上。
然后它匹配零个或多个单词字符,最后匹配一个单词边界。
您应该使用“ IgnoreCase”标志。
匹配示例:
abcabcabc香蕉aaa aaabbaa
const regex = /\b(?=([^ ]*a){3,})\w*\b/;
const strings = ['abcabcabc', 'abcabc', 'abcabcabcabc', 'aaa', 'abab', 'ababa', 'a a a', 'a ba ba', 'a ab ab', 'a ab ab ab', 'b ab ab ab'];
for (let i = 0; i < strings.length; i++) {
console.log(strings[i] + ": " + regex.test(strings[i]));
}