簡體   English   中英

在Java中使用正則表達式獲取子字符串

[英]get the substring using regular expression in java

我有以下格式的字符串集

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。請對此有所幫助。

. 是正則表達式中的特殊字符,它匹配(幾乎)任何字符(請參閱更多信息 )。 轉義. 將使您的正則表達式正常工作(我也通過將-可選(請參閱更多信息 )簡化了最后一部分):

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

另請參見此簡短演示

這將給出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])");

如果您的第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

您可以使用此正則表達式:

^([a-zA-Z ]*) (\\d{2}/\\d{2} \\d{2}/\\d{2}) (-?\\d+(?:\.\\d{2})?)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM