15

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

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

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

4

5 回答 5

10

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

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

由于Character类包含isAlphabetic您可以使用的方法

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

你也可以使用

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

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

于 2013-03-06T19:37:01.930 回答
2

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

编辑:示例

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

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

例子: \u00E0 matches à

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

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

于 2013-03-06T19:31:39.627 回答
2

你可以使用这个:

String[] names = name.split("[^a-zA-Z0-9'\\p{L}]+");

System.out.println(Arrays.toString(names));将输出:

[CEN01, Automação, Caso, Teste, java]

有关更多信息,请参阅

于 2013-03-06T19:41:41.080 回答
1

为什么不拆分分隔符?

String[] names = name.split("[_.]");
于 2013-03-06T19:36:09.233 回答
0

您可以随时将您想要的字符列入白名单,而不是将所有您不想要的字符列入黑名单:

^[^<>%$]*$

表达式 [^(many characters here)] 只匹配未列出的任何字符。

但这是个人意见。

于 2013-03-06T19:40:17.543 回答