字符串拆分,包含重音字符的单词

2022-09-03 14:49:41

我正在使用这个正则表达式:

x.split("[^a-zA-Z0-9']+");

这将返回一个包含字母和/或数字的字符串数组。

如果我使用这个:

String name = "CEN01_Automated_TestCase.java";
String[] names = name.Split.split("[^a-zA-Z0-9']+");

我得到了:

CEN01
Automated
TestCase
Java

但是如果我使用这个:

String name = "CEN01_Automação_Caso_Teste.java";
String[] names = name.Split.split("[^a-zA-Z0-9']+");

我得到了:

CEN01
Automa
o
Caso
Teste
Java

如何修改此正则表达式以包含重音字符?(á,ã,õ, etc...)


答案 1

http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

行为与方法类似的类别(已弃用的方法除外)可通过指定的属性具有名称的相同语法获得。java.lang.Character boolean ismethodname\p{prop}javamethodname

由于类包含可以使用的方法CharacterisAlphabetic

name.split("[^\\p{IsAlphabetic}0-9']+");

您还可以使用

name.split("(?U)[^\\p{Alpha}0-9']+");

但是您需要使用可以通过添加正则表达式来使用的标志。UNICODE_CHARACTER_CLASS(?U)


答案 2

我会查看有关正则表达式的Java文档。有一个Unicode部分,我相信这是你可能正在寻找的。

编辑:示例

另一种方法是匹配您要查找的字符代码。例如

\uFFFF where FFFF is the hexadecimal number of the character you are trying to match.

例:\u00E0 matches à

请注意,如果将反斜杠用作字符串文本,则需要在 Java 中对其进行转义。

在此处阅读更多相关信息。