我尝试编写一个正则表达式,以便实现以下目标:
- 在每个大写字母之间添加空格。
- 删除所有数字。
我有文本:ClassNameOne839
,我想要得到的文本是:Class Name One
是否有库函数可以做到这一点?或者有任何正则表达式可以使用吗?
我尝试编写一个正则表达式,以便实现以下目标:
我有文本:ClassNameOne839
,我想要得到的文本是:Class Name One
是否有库函数可以做到这一点?或者有任何正则表达式可以使用吗?
replaceAll()
调用的组合:String text = "ClassNameOne839";
String cleanText = text.replaceAll("\\d+", "").replaceAll("(.)([A-Z])", "$1 $2");
$1
和 $2
是正则表达式中第一组和第二组的引用。String cleanText = text.replaceAll("(.)([A-Z0-9]\\w)", "$1 $2");
输出结果将是:"类 名 一 839" - Zeek Aranorg.apache.commons.lang.StringUtils.splitByCharacterTypeCamelCase
几乎包含你所需的所有功能;) 试试这个:
cleanText = StringUtils.join(StringUtils.splitByCharacterTypeCamelCase(in.replaceAll("\\d+", "")), " ");
应该比正则表达式快很多。
[A-Z][a-z]+(?=[A-Z\s\b0-9])
将匹配每个以大写字母开头的单词,后面跟着另一个大写字母、空格字符或数字。只需在每个结果后面打印一个空格即可完成。
编辑:当然,前提是您的大写名称不包含奇怪的字符,使用方法如下:
Matcher matcher = Pattern.compile("[A-Z][a-z]+(?=[A-Z\s\b0-9])").matcher(input);
while(matcher.find()) {
string = string + matcher.group();
}
Sytem.out.println(string);
String result = "ClassName399".replaceAll("\\d", "").replaceAll("([A-Z])", "$1 ");
\\d
)并删除它们,第二个表达式查找任何大写字母(使用范围运算符[]
),然后取出你找到的$1
并在其后添加一个空格。