如何使用java String.replaceAll()替换字符串,不包括某些模式?

时间:2014-01-04 00:03:40

标签: java regex

我正在使用String.Replaceall替换正斜杠/后跟或前面加一个逗号后跟空格", "的空格除了一些模式(例如n/v,{ {1}}不应受影响)

以下所有输入

n/d

应输出为

"nausea/vomiting"
"nausea /vomiting"
"nausea/ vomiting"
"nausea / vomiting"

以下所有输入

 nausea, vomiting

应输出如下

"user have n/v but not other/ complications"
"user have n/d but not other / complications"

我试过了

"user have n/v but not other, complications"
"user have n/d but not other, complications"

但它之前切断了a并且让我感到恶心,呕吐

有没有人知道解决方案?

2 个答案:

答案 0 :(得分:0)

[^n/v]字符类,意味着n/v 之外的任何内容。

你可能正在寻找类似负面的背后隐藏

String regex= "(?<!\\bn)(\\s*/\\s*)";

这将匹配任何前面没有n的斜杠和空格组合,并适用于所有示例。您可以在外观here上阅读更多内容。

答案 1 :(得分:0)

您的第一个捕获组([^n/v])捕获任何不是字母n,字母v或斜杠(/)的字符。在这种情况下,它匹配a末尾的nausea并将其捕获以进行替换。

你需要更清楚自己是什么,而不是在这里取代。你只是想确定有一个逗号而不是以“呕吐”或“d”结束吗?您可以使用非捕获组来指示:

(?=asdf)没有捕获但是当放在最后确保匹配后,字符串将包含asdf; (?!asdf)确保。无论您使用哪个,初始括号后面的问号都会确保在找到匹配项时不会返回或替换它匹配的任何文本。

此外,不要忘记在Java源代码中,您必须始终将您放入字符串文字中的任何反斜杠加倍。