0

我有以下格式的字符串

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

4 回答 4

1

.是正则表达式中的一个特殊字符,它匹配(几乎)任何字符(查看更多信息)。转义.将使您的正则表达式工作得很好(我还通过使-选项简化了最后一部分(请参阅更多信息)):

^([a-zA-Z ]*) ([0-9]{2}/[0-9]{2} [0-9]{2}/[0-9]{2}) (-?[0-9]*\\.[0-9][0-9])

另请参阅这个简短的演示

于 2013-05-24T14:25:49.017 回答
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])");
于 2013-05-24T14:24:49.577 回答
0

你可以试试这个,前提是你的第三个值总是以“-”号开头。

        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
于 2013-05-24T14:25:35.760 回答
0

您可以使用此正则表达式:

^([a-zA-Z ]*) (\\d{2}/\\d{2} \\d{2}/\\d{2}) (-?\\d+(?:\.\\d{2})?)
于 2013-05-24T14:26:21.590 回答