与正则表达式分开不能正确返回数字

时间:2015-03-02 17:17:01

标签: java regex string split

我正在尝试使用正则表达式将字符串拆分为两个。例如,输入字符串的格式为"Something something something 30min"。它总是以这种格式以分钟为单位的时间结束。我需要将其拆分为"Something something something""30min"。我现在的解决方案是:

String[] separatedLine = line.split("(?=(\\d)+)" );

然后我得到“东西有点东西”和3.如果我试着改为:

String[] separatedLine = line.split("(?=(\\d\\d))" );

它有效,但我不知道我的号码的大小,它可以是5或者我知道它可以是180。我尝试了很多不同的组合,但似乎没有一种方法适用于每种情况。

3 个答案:

答案 0 :(得分:1)

使用字边界

尝试使用此正则表达式
String[] separatedLine = line.split("(?=\\b\\d)" );

RegEx Demo

这将在30之前分开,但不会在30之间分开。

答案 1 :(得分:0)

根据数字前面的空格进行分割。

String[] separatedLine = line.split("\\s+(?=\\d+)" );

OR

如有必要,请在号码后添加min

String[] separatedLine = line.split("\\s+(?=\\d+min)" );

<强>码

String s = "Something something something 30min";
String[] parts = s.split("\\s+(?=\\d+)");
System.out.println(Arrays.toString(parts));

<强>输出:

[Something something something, 30min]

答案 2 :(得分:0)

你可以这样做:

String[] split = "Something something something 30min".split("(?<!\\d)(?=\\d+)");

只要出现的数字不在另一个数字之前,它就会将String分开。