繁体   English   中英

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

[英]java regex to filter out non-English text

我发现了一些关于过滤掉非英语的正则表达式的参考,但它们都不是在 Java 中,除了它们都指的是与我试图解决的问题有些不同的问题之外:

  1. 用空格替换所有非英文字符。
  2. 如果字符串包含任何非英文字符,则创建一个返回true的方法。

我所说的“英文文本”不仅是指实际的字母和数字,还包括标点符号。

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

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

事实上,如此简单以至于我怀疑我遗漏了一些东西......你在上面发现任何警告吗?

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

事实上,如此简单以至于我怀疑我遗漏了一些东西......你在上面发现任何警告吗?

\W等价于[^\w] ,而\w等价于[a-zA-Z_0-9] 使用\W将替换所有不是字母、数字或下划线的东西——比如制表符和换行符。 这是否是一个问题真的取决于你。

我所说的“英文文本”不仅是指实际的字母和数字,还包括标点符号。

在这种情况下,您可能需要使用省略标点符号的字符 class; 就像是

[^\w.,;:'"]

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

使用PatternMatcher

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

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

这是我的解决方案。 我假设文本可能包含英文单词、标点符号和标准 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); }

这对我有用

  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);
    }

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

要在字符串包含任何非英文字符时返回 true,请使用string.matches

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM