使用[^ a-zA-Z]正则表达式替换单词时出现问题

时间:2008-11-22 12:21:14

标签: java regex replace

根本无法得到这个,谷歌搜索也没有多大帮助..

我知道的第一件事:给定一个字符串和正则表达式,如何用替换字符串替换所有匹配此正则表达式的字符串?在String类中使用replaceAll()方法。

现在我无法做到。我现在在我的代码中的正则表达式是[^ a-zA-Z],我确信这个正则表达式肯定会有一个范围。只有一些字符可能会添加到列表中。以下代码中我需要的输出是工作表+ blah 但是我使用replaceAll()得到的是工作表++++ blah < / p>

String homeworkTitle = "Worksheet%#5_blah";
String unwantedCharactersRegex = "[^a-zA-Z]";
String replacementString = "+";
homeworkTitle = homeworkTitle.replaceAll(unwantedCharactersRegex,replacementString);
System.out.println(homeworkTitle);

实现我希望的输出的方法是什么?我在这里缺少任何Java方法吗?

2 个答案:

答案 0 :(得分:5)

[^a-zA-Z]+

很好。

你只需要一个greedy quantifier就可以匹配尽可能多的非字母字符,并将所有匹配替换为一个'+'(a - 默认情况下 - 贪心量词)

注意:[^a-zA-Z]+?会使'+'量词变得懒惰,并且会给你与[^a-zA-Z]相同的结果,因为它一次只匹配一个非字母字符。

答案 1 :(得分:2)

String unwantedCharactersRegex = "[^a-zA-Z]"

这匹配一个非字母。因此,每个单个非字母都被+替换。你需要说“一个或多个”,所以试试

String unwantedCharactersRegex = "[^a-zA-Z]+"