在java中使用正则表达式获取子字符串

时间:2013-05-24 14:18:06

标签: java regex

我有以下格式的字符串

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.有些人可以帮我解决这个问题。

4 个答案:

答案 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})?)