在 Java 中使用正则表达式拆分字符串

2022-09-04 05:57:23

任何人都可以用一些正则表达式来帮助我。

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

"810LN15"

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

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

我可以使用什么正则表达式来适应这种情况?


答案 1

String.split不会给你所需的结果,我猜应该是“810”,“LN”,“15”,因为它必须寻找一个要拆分的令牌并剥离该令牌。

尝试使用此正则表达式:,它将匹配任何数字和字母序列并获得不同的数字/文本组(即“AA810LN15QQ12345”将产生组“AA”,“810”,“LN”,“15”,“QQ”和“12345”)。PatternMatcher(\d+)|([a-zA-Z]+)

例:

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

答案 2

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

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

输出:

[810, LN, 15]