2014-04-12 18 views
0

我有一些字符串java的正則表達式從一個較大的字符串排除特定重量日期

「今天31.12.2014g我們收到貨。這些重量31.12克(2014年3月23日)」

31.12 .2014 g - 它沒有錯。與日期標籤一些文字信(無空格)

我需要從字符串僅重值(無日期值)提取, 但我的正則表達式:

[0-9]+\.[0-9]+g

exctact日期太: (

我的結果(兩組):

12.2014克

31.12g < - 我只需要這個!

+0

是日期格式在您的數據總是'dd.mm.yyyy'(有時'g')和重量'xxxxx.xxg '像'123.00g'?或者像'2014.12.31g'這樣的日期也有可能嗎? – Pshemo

回答

2

您可以添加negative look behind,以確保部分之前你有興趣有你別無所求而你的情況似乎是

  • 可以說,數字1和10之間,後點樣的情況下,

    31.12.2014g 
    ^^^ 
    
  • 也確保我們會匹配的情況下,

    0123整個價值不只是它的一部分
    31.12.2014g 
        ^^^^^^^ 
    

    其中2.2014g履行先前負面的外觀條件的背後,我們需要確保匹配的部分不應該有任何數字之前

所以儘量也許像

(?<!\\d{1,10}\\.)(?<!\\d)\\d+\\.\\d+g 

BTW \d東西(在Java中寫爲"\\d")代表[0-9]。如果你願意,你可以改回它。

演示:

String data = "Today 31.12.2014g we receive goods. These weight is 31.12g (23.03.2014)"; 
Pattern p = Pattern.compile("(?<!\\d{1,10}\\.)(?<!\\d)\\d+\\.\\d+g"); 
Matcher m = p.matcher(data); 
while(m.find()) 
    System.out.println(m.group()); 

輸出:31.12g

+0

謝謝!謝謝大家! – Serjaru

2

您可以搜索空格:

\s[0-9]+\.[0-9]+g // -> " 31.12g"

...總是假設恰好有兩位小數的位置:

[^\.][0-9]+\.[0-9]{2}g // -> "31.12g"(不過,如果日期拼寫爲DD.MM,則會失敗。YYG)

...或工作日期:

[0-9]?[0-9]\.[0-9]?[0-9]\.[0-9]?[0-9]?[0-9][0-9]g?.+(\b[0-9]+\.[0-9]+g) // -> "31.12.2014g we receive goods. These weight is 31.12g", "31.12g"

相關問題