在Java中使用Regex拆分字符串

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

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

"810LN15"

1方法要求返回810,另一方法需要LN,另一方法应返回15。

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

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

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 tokens = new LinkedList(); 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 

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

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

输出:

 [810, LN, 15] 

(\\d+)([a-zA-Z]+)(\\d+)应该可以解决问题。 第一个捕获组将是第一个数字,第二个捕获组将是其间的字母,第三个捕获组将是第二个数字。 双反斜杠适用于java。

这给了你们正在寻找的确切的东西

  Pattern p = Pattern.compile("(([a-zA-Z]+)|(\\d+))|((\\d+)|([a-zA-Z]+))"); Matcher m = p.matcher("810LN15"); List tokens = new LinkedList(); while(m.find()) { String token = m.group( 1 ); tokens.add(token); } System.out.println(tokens);