java正则表达式过滤掉非英文文本

时间:2011-06-01 16:29:44

标签: java regex

我发现一些正则表达式的引用过滤掉了非英语,但none中的different是Java语言,除了它们都指的是{{3}}问题,而不是我想要的问题。解决:

  1. 替换所有非英文字符 有空间。
  2. 创建一个返回true的方法 如果一个字符串包含任何非英语 字符。
  3. “英文文本”不仅指实际的字母和数字,还指标点符号。

    到目前为止,我能够为目标#1带来的非常简单:

    String.replaceAll("\\W", " ")
    

    事实上,这么简单,我怀疑我错过了什么......你是否发现了上述任何警告?

    至于目标#2,我可以在上面的trim()之后简单地replaceAll()字符串,然后检查它是否为空。但是......有更有效的方法吗?

4 个答案:

答案 0 :(得分:4)

  

事实上,这么简单,我怀疑我错过了什么......你是否发现了上述任何警告?

\W相当于[^\w],而\w相当于[a-zA-Z_0-9]。使用\W将替换所有内容,这不是字母,数字或下划线 - 如标签和换行符。这个问题是否真的取决于你。

  

“英文文本”不仅指实际的字母和数字,还指标点符号。

在这种情况下,您可能希望使用省略标点符号的字符类;

之类的东西
[^\w.,;:'"]
  

创建一个方法,如果字符串包含任何非英语字符,则返回true。

使用PatternMatcher

Pattern p = Pattern.compile("\\W");

boolean containsSpecialChars(String string)
{
    Matcher m = p.matcher(string);
    return m.find();
}

答案 1 :(得分:2)

这对我有用

  private static boolean isEnglish(String text) {
        CharsetEncoder asciiEncoder = Charset.forName("US-ASCII").newEncoder();
        CharsetEncoder isoEncoder = Charset.forName("ISO-8859-1").newEncoder();
        return  asciiEncoder.canEncode(text) || isoEncoder.canEncode(text);
    }

答案 2 :(得分:1)

这是我的解决方案。我假设文本可能包含英文单词,标点符号和标准的ascii符号,如#,%,@等。



private static final String IS_ENGLISH_REGEX = "^[ \\w \\d \\s \\. \\& \\+ \\- \\, \\! \\@ \\# \\$ \\% \\^ \\* \\( \\) \\; \\\\ \\/ \\| \\< \\> \\\" \\' \\? \\= \\: \\[ \\] ]*$";

private static boolean isEnglish(String text) {
		if (text == null) {
			return false;
		}
		return text.matches(IS_ENGLISH_REGEX);
	}
&#13;
&#13;
&#13;

答案 3 :(得分:0)

假设英文单词由以下字符组成:[a-zA-Z_0-9]

如果字符串包含任何非英语字符,则返回true,使用string.matches

return !string.matches("^\\w+$");