3

我有一个像

 /.../Male/...
 or

 /../Female/...

现在我想做如下的事情来用 foo 替换字符串的男性女性部分

 /../foo/..

这个的正则表达式是什么......目前我正在做如下但没有成功

url.replace("(fe)?male","foo")
4

3 回答 3

8

您需要使用replaceAll正则表达式,表达式可能更简单:

url.replaceAll("(Fem|M)ale","foo");

或者

url.replaceAll("Female|Male","foo");
于 2013-07-28T08:55:32.363 回答
7

你需要replaceAll(),它使用正则表达式来查找要替换的内容,而不是replace(),它查找纯文本:

url = url.replaceAll("(fe)?male","foo");

另请注意,字符串是不可变的,因此调用替换方法不会更改字符串,它会返回一个带有所做更改的字符串,因此您必须将结果分配回变量。

更好的正则表达式是:

url = url.replaceAll("(?i)\\b(fe)?male\\b","foo");

\b则表达式确保被替换的是整个单词女/男。如果没有\b它,它将取代“诅咒”中的“男性”。

使(?i)匹配不区分大小写。

于 2013-07-28T08:53:47.307 回答
3

您需要replaceAll用于模式。

此外,您应该考虑使用不区分大小写的模式,例如:

String input = ".../Female/...";
System.out.println(input.replaceAll("(?i)(fe)?male", "foo"));

输出:

.../foo/...
于 2013-07-28T08:55:09.720 回答