我有一个像这样的完整字符串 - "你好你们所有人" 我有一个坏话,比如"所有" 现在我设法找到第一个容易的第二个字符串, 但是,让我们说我的第一个字符串是"你好a.l.l你们" 或者"你好,我,你们这些" 甚至"你好,你们好吗?#34; 有找到它的正则表达方式吗? 我到目前为止所做的是
String wordtocheck =pair.getKey().toString();
String newerstr = "";
for(int i=0;i<wordtocheck.length();i++)
newerstr+=wordtocheck.charAt(i)+"\\.";
Pattern.compile("(?i)\\b(newerstr)(?=\\W)").matcher(currentText.toString());
但它没有做到这一点 感谢所有帮助者
答案 0 :(得分:1)
您可以通过在关键字的字符之间插入\W*
(=零个或多个非字符字符,即不是字母,数字或下划线的字符)来动态构建模式,以搜索:
String s = "Hello a l l you guys";
String key = "all";
String pat = "(?i)\\b" + TextUtils.join("\\W*", key.split("")) + "\\b";
System.out.println("Pattern: " + pat);
Matcher m = Pattern.compile(pat).matcher(s);
if (m.find())
{
System.out.println("Found: " + m.group());
}
请参阅online demo(使用String.join
代替TextUtils.join
,因为这是一个Java演示版)
如果搜索字中可能存在非单词字符,则需要将\b
字边界替换为(?<!\\S)
(初始\b
)和(?!\\S)
(而非尾随\b
),或完全删除。
答案 1 :(得分:0)
试试这个
String str="Hello .a-l l? guys";
str=str.replaceAll("\\W",""); //replaces all non-words chars with empty string.
str现在是“Helloallguys”