用于过滤非英语文本的java正则表达式
我发现了一些对regex的引用,这些引用过滤掉了非英语的内容,但其中有一些是用Java编写的,除了它们都指的是一些问题,而不是我试图解决的问题:用于过滤非英语文本的java正则表达式,java,regex,Java,Regex,我发现了一些对regex的引用,这些引用过滤掉了非英语的内容,但其中有一些是用Java编写的,除了它们都指的是一些问题,而不是我试图解决的问题: 替换所有非英语字符 有一个空格 创建一个返回true 如果字符串包含任何非英语 性格 我所说的“英文文本”不仅指实际的字母和数字,还指标点符号 到目前为止,我对目标1的理解非常简单: String.replaceAll("\\W", " ") 事实上,这么简单,我怀疑我错过了什么。。。你发现上面有什么警告吗 至于目标2,我可以简单地trim()上面r
true
如果字符串包含任何非英语
性格String.replaceAll("\\W", " ")
事实上,这么简单,我怀疑我错过了什么。。。你发现上面有什么警告吗
至于目标2,我可以简单地trim()
上面replaceAll()
后面的字符串,然后检查它是否为空。但是有没有更有效的方法
事实上,这么简单,我怀疑我错过了什么。。。你发现上面有什么警告吗
\W
相当于[^\W]
,\W
相当于[a-zA-Z_0-9]
。使用\W
将替换不是字母、数字或类似下划线的制表符和换行符的所有内容。这是否是个问题真的取决于你
我所说的“英文文本”不仅指实际的字母和数字,还指标点符号
在这种情况下,您可能希望使用省略标点符号的字符类;差不多
[^\w.,;:'"]
创建一个方法,该方法在字符串包含任何非英语字符时返回true
使用和
事实上,这么简单,我怀疑我错过了什么。。。你发现上面有什么警告吗
\W
相当于[^\W]
,\W
相当于[a-zA-Z_0-9]
。使用\W
将替换不是字母、数字或类似下划线的制表符和换行符的所有内容。这是否是个问题真的取决于你
我所说的“英文文本”不仅指实际的字母和数字,还指标点符号
在这种情况下,您可能希望使用省略标点符号的字符类;差不多
[^\w.,;:'"]
创建一个方法,该方法在字符串包含任何非英语字符时返回true
使用和
假设一个英语单词由以下字符组成:[a-zA-Z_0-9] 如果字符串包含任何非英语字符,则要返回true,请使用:
假设一个英语单词由以下字符组成:[a-zA-Z_0-9] 如果字符串包含任何非英语字符,则要返回true,请使用:
这是我的解决办法。我假设文本可能包含英语单词、标点符号和标准ascii符号,如#、%、@等
private static final String是\u ENGLISH\u REGEX=“^[\\w\\d\\s\\.\&\\+\-\\,\\!\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;
专用静态布尔值isEnglish(字符串文本){
if(text==null){
返回false;
}
返回text.matches(是英语正则表达式);
}这是我的解决方案。我假设文本可能包含英文单词、标点符号和标准ascii符号,如#、%、@等
private static final String是\u ENGLISH\u REGEX=“^[\\w\\d\\s\\.\&\\+\-\\,\\!\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;
专用静态布尔值isEnglish(字符串文本){
if(text==null){
返回false;
}
返回text.matches(是英语正则表达式);
}
这对我很有用
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);
}
这对我有用
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);
}
有一小部分合法的英语单词包含重音符号-例如“naïve”。我认为你需要定义你所说的“英语文本”是什么意思。。。i、 e.以下句子是否被视为“英语文本”?“她的未婚夫的名字叫何塞·勃朗特。”@Spudley@Nate你们当然都对。就我的特殊情况而言,“她的未婚夫的名字是JoséBrontë。”并不被认为是全英语的,因此该方法应该返回true
。有少数合法的英语单词包含重音字符,例如“naïve”。我想你需要定义“英语文本”的含义。。。i、 e.以下句子是否被视为“英语文本”?“她的未婚夫的名字叫何塞·勃朗特。”@Spudley@Nate你们当然都对。在我的特殊情况下,“她的未婚夫的名字是JoséBrontë。”并不被认为是全英语的,因此该方法应该返回true
@dogbane为什么^
和$
?@regex新手它没有必要,但我要说的很清楚,我是在从头到尾匹配整个字符串。@dogbane您的正则表达式似乎不适用于以非英语字符开头(或结尾)的字符串。你能证实吗?@regex-rookie是的。我的语句按要求返回true。@dogbane您的正则表达式仍然不起作用。试着把一个只有一个非英语字符的全英文文本放在上面,看看我的意思。@dogbane为什么^
和$
?@regex新手这不是必需的,但我要说的是,我在从头到尾匹配整个字符串。@dogbane你的正则表达式似乎不适用于开始(或结束)的字符串使用非英语字符。你能证实吗?@regex-rookie是的。我的语句按要求返回true。@dogbane您的正则表达式仍然不起作用。试着把一个只有一个非英语字符的全英语文本放在屏幕上,看看我的意思。-1这行不通。您需要使用matcher.find()
或更改正则表达式以匹配整个字符串。-1这不起作用。您需要使用matcher.find()
或更改正则表达式以匹配整个字符串。