Android - Java - 正则表达式问题 - 连续的单词不匹配

时间:2010-12-28 18:01:27

标签: java android regex

对于我的例子,我试图用空格替换字符串中的“the”和“a”的所有情况。 包括这些单词与引号和其他标点符号等字符相邻的情况

String oldString = "A test of the exp."
Pattern p = Pattern.compile("(((\\W|\\A)the(\\W|\\Z))|((\\W|\\A)a(\\W|\\Z)))",Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(oldString);
newString = m.replaceAll(" ");

“对exp的测试。”返回“exp的测试”。 - 是的!

“对exp的测试。”返回“exp的测试”。 - Boooo!

“这个测试中的a是一个。”返回“此测试中的a是。 - DoubleBoooo!

非常感谢任何帮助。 谢谢!

3 个答案:

答案 0 :(得分:1)

String resultString = subjectString.replaceAll("\\b(?:a|the)\\b", " ");

\b匹配单词边界(即单词的开头或结尾,其中“单词”是一个字母数字字符序列)。

(?:...)是一个非捕获组,需要将其他单词(在本例中为athe)与周围的单词边界锚点分开。

答案 1 :(得分:1)

或者简化为@Robokop soln。

Pattern.compile("(\\b(the|a)\\b)",Pattern.CASE_INSENSITIVE);

Pattern.compile('\b(the|a)\b',Pattern.CASE_INSENSITIVE);

不确定在Java中引用。

答案 2 :(得分:0)

Pattern.compile("(\\bthe\\b)|(\\ba\\b)",Pattern.CASE_INSENSITIVE);