我正在制定审查程序,以匹配一系列被删除的单词或表达。我还想找到一个单词,其中该单词中的每个字母都用空格分隔。例如,如果我要搜索something
,则应该匹配s o m eth i n g
。
我试过简单地从我正在搜索的字符串中删除空格,这在很大程度上是有效的,但在某些情况下,它将两个单独的单词合并为一个,这恰好被审查,因此它将错误地匹配。
我能做些什么来克服这个问题?
答案 0 :(得分:1)
<强> ^s\s?o\s?m\s?e\s?t\s?h\s?i\s?n\s?g\s?$
强>
问号表示字符可能存在,但如果不存在,则正则表达式仍将匹配。
编辑:用*
- 星号替换问号以允许匹配多个空格。 感谢Wiktor的评论。
答案 1 :(得分:1)
以下是评论中的建议:在查询符号之间使用\s*
.replaceAll("(?<=.)(?!$)", "\\\\s*")
请参阅regex demo。
这会将\s*
添加到搜索字词中。整个Java demo看起来像
String search = "something";
String rx = search.replaceAll("(?<=.)(?!$)", "\\\\s*");
Pattern pat = Pattern.compile(rx);
Matcher matcher = pat.matcher("s o m eth i n g");
if (matcher.find()) {
System.out.println(matcher.group(0));
}
如果标点符号为空格,请使用"\\\\W*"
代替"\\\\s*"
。
答案 2 :(得分:0)
也可以做一个大表达,虽然这不会有非常好的表现,但如果不要求正则表达式,这将是一个基本的方法。
我做了一个例子:http:// ideone.com/DdiKKJ