我有以下格式的字符串
Local Tax 02/07 02/14 -0.42
我想把上面的内容分成三个单独的叮咬,如
Local Tax
02/07 02/14
-0.42
我写了以下代码片段
package com.demo;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class DemoClass {
/**
* @param args
*/
public static void main(String[] args) {
String s ="Sales Tax 08/07 09/06 0.42";
//String s1 = "Sales Tax 02/07 02/14 -1.02";
Pattern pattern = Pattern.compile("^([a-zA-Z ]*) ([0-9]{2}/[0-9]{2} [0-9]{2}/[0-9]{2}) ([-[0-9]*.[0-9][0-9]|[0-9]*.[0-9][0-9]])");
Matcher matcher = pattern.matcher(s);
if (matcher.find()) {
System.out.println("String Name::"+s);
System.out.println(matcher.group(1));
System.out.println(matcher.group(2));
System.out.println(matcher.group(3));
}
}
}
我的输出为
String Name::Sales Tax 08/07 09/06 0.42
Sales Tax
08/07 09/06
0
matcher.group(3)应该返回0.42,但显示为0.有些人可以帮我解决这个问题。
答案 0 :(得分:1)
.
是正则表达式中的一个特殊字符,它匹配(几乎)任何字符(请参阅 more info )。转义.
会使你的正则表达式工作得很好(我还通过使-
可选来简化最后一部分(参见 more info )):
^([a-zA-Z ]*) ([0-9]{2}/[0-9]{2} [0-9]{2}/[0-9]{2}) (-?[0-9]*\\.[0-9][0-9])
另请参阅此 short demo 。
答案 1 :(得分:0)
这将给出0.42响应。
Pattern pattern = Pattern.compile("^([a-zA-Z ]*) ([0-9]{2}/[0-9]{2} [0-9]{2}/[0-9]{2}) ([0-9]*.[0-9][0-9]|[0-9]*.[0-9][0-9])");
答案 2 :(得分:0)
如果您的第3个值始终以“ - ”符号开头,则可以尝试此操作。
String test = "Local Tax 02/07 02/14 -0.42";
Pattern pattern = Pattern.compile("((?<=\\p{Alpha})\\s(?=\\d))|((?<=\\d)\\s(?=-\\d))");
String[] result = pattern.split(test);
for (String partial: result) {
System.out.println(partial);
}
编辑如果您的第三个值不一定是负数,请尝试相反(相同的输出):
String test = "Local Tax 02/07 02/14 -0.42";
Pattern pattern = Pattern.compile("((?<=\\p{Alpha})\\s(?=\\d))|((?<=\\d)\\s(?=\\p{Punct}?[\\d\\.]+?$))");
String[] result = pattern.split(test);
for (String partial: result) {
System.out.println(partial);
}
输出:
Local Tax
02/07 02/14
-0.42
答案 3 :(得分:0)
您可以使用此正则表达式:
^([a-zA-Z ]*) (\\d{2}/\\d{2} \\d{2}/\\d{2}) (-?\\d+(?:\.\\d{2})?)