我想使用正则表达式将camelCase名称拆分为单个名称,以执行拼写检查。
分割应如下:
1)extendedStructureForNUB - >扩展,结构,For,NUB
2)extendedStructureFor2004 - >扩展,结构,For,2004
使用以下问题的答案,我可以分开第一个条件。
问题 :RegEx to split camelCase or TitleCase (advanced)
但是对于包含数字的字符串(第二个条件),它不会按照格式返回。
extendedStrctureFor2004 --> extended, Structure, For2004
请建议一种方法,我可以重复使用这个正则表达式来分割数字。
答案 0 :(得分:3)
public static void main(String[] args)
{
for (String w : "camelValue".split("(?<!(^|[A-Z0-9]))(?=[A-Z0-9])|(?<!^)(?=[A-Z][a-z])")) {
System.out.println(w);
}
}
编辑:纠正UPPER2000UPPER的情况,正则表达式变为:
public static void main(String[] args)
{
for (String w : "camelValue".split("(?<!(^|[A-Z0-9]))(?=[A-Z0-9])|(?<!(^|[^A-Z]))(?=[0-9])|(?<!(^|[^0-9]))(?=[A-Za-z])|(?<!^)(?=[A-Z][a-z])")) {
System.out.println(w);
}
}
答案 1 :(得分:1)
public static void main(String[] args)
{
for (String w : "extended2004FeeStructure".split("(?<!(^|[A-Z0-9]))(?=[A-Z0-9])|(?<!^)(?=[A-Z][a-z])")) {
System.out.println(w);
}
}
更正了一个
答案 2 :(得分:1)
我看到的是你上一个问题的回答几乎是完成的。如果我发现你我会添加另一个分裂操作,但这次是在每个单词中间的第一个数字之前。
以下是示例:
String data="2Hello2000WORLDHello2000WORLD";
//your previois split
String[] myFirstSplit=data.split("(?<!(^|[A-Z]))(?=[A-Z])|(?<!^)(?=[A-Z][a-z])");
//I will store split results in list (I don't know size of array)
List<String> list=new ArrayList<>();
for (String s:myFirstSplit){
//if splited word contains digit after letter then split
for (String tmp:s.split("(?<=[a-zA-Z])(?=[0-9])"))
list.add(tmp);
}
System.out.println(list);
//out [2, Hello, 2000, WORLD, Hello, 2000, WORLD]
答案 3 :(得分:0)
分开后
extendedStrctureFor2004 - &gt;扩展,结构,For2004
将其存储在某些数组中,例如“arr”
使用此正则表达式
var numberPattern = / [0-9] + / g; var numMatch = arr [i] .match(numberPattern);
现在numMatch将包含你想要的数字..