你能帮助处理Java中的正则表达式吗?

4

我有一些字符串,它们可能包含随机的符号和数字。以下是一些示例:

contains(reserved[j])){

close();

i++){

letters[20]=word

我希望找到任何非字母字符,并用空格替换它,使上述示例看起来像:

contains reserved j

close

i

letters word

什么是最好的方法来做这件事?

你能具体说明一下“字母”是什么意思吗?它应该基于计算机的当前区域设置,还是从您预先确定为感兴趣的字母的固定字符列表中选择?它是否包括带重音符号的字符?它是否包括俄语或希腊字母表中的字符? - Mark Byers
4个回答

3

这取决于你对“不是字母”的理解,但假设你的意思是字母是a-z或A-Z,那么可以尝试以下方法:

s = s.replaceAll("[^a-zA-Z]", " ");

如果您想将多个符号折叠成一个空格,则在正则表达式末尾添加加号。
s = s.replaceAll("[^a-zA-Z]+", " ");

2
yourInputString = yourInputString.replaceAll("[^\\p{Alpha}]", " ");

^ 表示“除了”所有字符。

\p{Alpha} 表示所有字母字符。

详见 Pattern


3
实际上,他希望同时摆脱数字。\p{Alnum}也会包含数字。 - BalusC

1
我想找到任何非字母字符。这将是[^\p{Alpha}]+。方括号[]表示一组。 \p {Alpha}匹配任何字母字符(大写和小写字母,基本上与\p {Upper}\p {Lower}a-zA-Z相同)。组内的^反转匹配。 +表示一个或多个匹配的序列。替换为空格的代码为" "
string = string.replaceAll("[^\\p{Alpha}]+", " ");

另外,您可以查看{{link1:java.util.regex.Pattern javadoc}}以获得可用模式的简明概述。您可以在伟大的网站http://regular-expression.info上了解更多关于正则表达式的知识。


0
使用正则表达式 /[^a-zA-Z]/,它表示所有不在 a-z/A-Z 字符范围内的内容。
在 Ruby 中,我会这样做:
"contains(reserved[j]))".gsub(/[^a-zA-Z]/, " ")
 => "contains reserved j   "

在Java中应该是这样的:

import java.util.regex.*;
...

String inputStr = "contains(reserved[j])){";
String patternStr = "[^a-zA-Z]";
String replacementStr = " ";

// Compile regular expression
Pattern pattern = Pattern.compile(patternStr);

// Replace all occurrences of pattern in input
Matcher matcher = pattern.matcher(inputStr);
String output = matcher.replaceAll(replacementStr);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接