我尝试编写正则表达式以便:
我有文字:ClassNameOne839
,我希望得到文字:Class Name One
有一个库函数可以做到吗?或任何正则表达式?
答案 0 :(得分:9)
您可以像这样使用replaceAll()
次调用的组合:
String text = "ClassNameOne839";
String cleanText = text.replaceAll("\\d+", "").replaceAll("(.)([A-Z])", "$1 $2");
首先删除所有数字,然后在不在String
开头的所有大写字母之前添加一个空格。 $1
和$2
是对正则表达式的第一个和第二个组的引用。
答案 1 :(得分:1)
org.apache.commons.lang.StringUtils.splitByCharacterTypeCamelCase
几乎所有你需要的东西;) 试试这个:
cleanText = StringUtils.join(StringUtils.splitByCharacterTypeCamelCase(in.replaceAll("\\d+", "")), " ");
应该比正则表达式快得多。
答案 2 :(得分:0)
以下正则表达式[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);
答案 3 :(得分:0)
String result = "ClassName399".replaceAll("\\d", "").replaceAll("([A-Z])", "$1 ");
第一个表达式将检测字符串中的所有整数(\\d
)并删除它们,第二个表达式查找任何大写字母(使用范围运算符[]
)然后获取您找到的{{{ 1}}并在其后面添加一个空格。
有关正则表达式的更多信息,请参阅Java Pattern类。