我有一个模式String pageText="Hello World, How areyou doing"
(没有空格)。并且搜索pattern
代表"How are you"
Matcher matcher = pattern.matcher(pageText));
int count = 0;
while (matcher.find()) {
count++;
}
counter
正在返回0
,因为我的pageText
变量中缺少空格。
有没有办法忽略空格检查,应该能够找到“你好吗”模式的匹配?
答案 0 :(得分:0)
最简单的方法之一可能是使用正则表达式模式中的\s*
替换空格,使其看起来更像"How\\s*are\\s*you"
,因此它可以匹配Howareyou
How areyou
Howare you
String pageText="Hello World, How areyou doing";
Pattern pattern = Pattern.compile("How are you".replaceAll("\\s+","\\\\s*"));
Matcher matcher = pattern.matcher(pageText);
int count = 0;
while (matcher.find()) {
count++;
}
System.out.println(count);
编辑:
由于您正在使用Pattern.quote
来转义所有正则表达式特殊字符,因此添加\s*
内容并不重要,因为它也会被转义。对此的简单解决方案是仅引用单词,因为只有它们可以具有需要转义的正则表达式元字符,因此我们正在寻找能够构建类似
quote(word1)\s*quote(word2)\s*quote(word3)
代码可能如下所示:
String pageText = "Hello World, How areyou doing";
String searchFor = "How are you";
String searchingRegex = Stream.of(searchFor.split("\\s+"))//stream of words
.map(word -> Pattern.quote(word))//quote each word
.collect(Collectors.joining("\\s*"));//join words with `\s*` delimiter
Pattern pattern = Pattern.compile(searchingRegex);
//...