试图在字符串中找到带分隔符的单词

时间:2016-11-30 10:54:43

标签: java android regex

我有一个像这样的完整字符串 - "你好你们所有人" 我有一个坏话,比如"所有" 现在我设法找到第一个容易的第二个字符串, 但是,让我们说我的第一个字符串是"你好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());

但它没有做到这一点 感谢所有帮助者

2 个答案:

答案 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”