在Java中使用Regex拆分字符串

Dam*_*ien 12 java regex

有人能帮助我一些正则表达式.

我想将以下字符串拆分为数字,字符串编号

"810LN15"

1方法需要返回810,另一个需要LN,另一个应返回15.

对此唯一真正的解决方案是使用正则表达式,因为数字的长度会增长

我可以用什么正则表达式来容纳这个?

Tho*_*mas 18

String.split 不会给你想要的结果,我想这将是"810","LN","15",因为它必须寻找分裂的标记并将剥离该标记.

尝试PatternMatcher替代,使用此正则表达式:(\d+)|([a-zA-Z]+),这将匹配数字与字母的顺序,并获得不同数量/文组(即"AA810LN15QQ12345"将导致群体"AA","810","LN","15" ,"QQ"和"12345").

例:

Pattern p = Pattern.compile("(\\d+)|([a-zA-Z]+)");
Matcher m = p.matcher("810LN15");
List<String> tokens = new LinkedList<String>();
while(m.find())
{
  String token = m.group( 1 ); //group 0 is always the entire match   
  tokens.add(token);
}
//now iterate through 'tokens' and check whether you have a number or text
Run Code Online (Sandbox Code Playgroud)


Ala*_*ore 10

在Java中,与大多数正则表达式一样(Python是一个值得注意的例外),split()正则表达式在找到匹配项时不需要使用任何字符.在这里,我使用了前瞻和后视来匹配任何具有数字一侧的位置和另一个非数字的位置:

String source = "810LN15";
String[] parts = source.split("(?<=\\d)(?=\\D)|(?<=\\D)(?=\\d)");
System.out.println(Arrays.toString(parts));
Run Code Online (Sandbox Code Playgroud)

输出:

[810, LN, 15]
Run Code Online (Sandbox Code Playgroud)


Mar*_*zzi 7

(\\d+)([a-zA-Z]+)(\\d+)应该做的伎俩.第一个捕获组将是第一个数字,第二个捕获组将是中间的字母,第三个捕获组将是第二个数字.双反斜杠适用于java.