簡體   English   中英

Java正則表達式從日期較大的字符串中排除特定的權重

[英]java regex to exclude specific weight from a larger string with date

我有一些線

“今天我們收到的商品為31.12.2014g。這些重量為31.12g(2014年3月23日)”

2014年12月31日g-這不是錯誤。 一些帶有日期標簽的文本帶有g字母(無空格)

我只需要從字符串中提取權重值(沒有日期值),但是我的正則表達式:

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

也是約會日期:(

我的結果(兩組):

12.2014克

31.12g <-我只需要這個!!!

您可以在后面添加否定的外觀,以確保在您感興趣的部分之前沒有您不想要的東西

  • 讓我們說出1到10之間的數字,然后加上點號

     31.12.2014g ^^^ 
  • 還要確保我們將匹配整個值,而不僅僅是部分匹配,以防萬一

     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

您可以搜索空格:

\\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"

暫無
暫無

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

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