我有一些字符串java的正則表達式從一個較大的字符串排除特定重量日期
「今天31.12.2014g我們收到貨。這些重量31.12克(2014年3月23日)」
31.12 .2014 g - 它沒有錯。與日期標籤一些文字摹信(無空格)
我需要從字符串僅重值(無日期值)提取, 但我的正則表達式:
[0-9]+\.[0-9]+g
exctact日期太: (
我的結果(兩組):
12.2014克
31.12g < - 我只需要這個!
我有一些字符串java的正則表達式從一個較大的字符串排除特定重量日期
「今天31.12.2014g我們收到貨。這些重量31.12克(2014年3月23日)」
31.12 .2014 g - 它沒有錯。與日期標籤一些文字摹信(無空格)
我需要從字符串僅重值(無日期值)提取, 但我的正則表達式:
[0-9]+\.[0-9]+g
exctact日期太: (
我的結果(兩組):
12.2014克
31.12g < - 我只需要這個!
您可以添加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
謝謝!謝謝大家! – Serjaru
您可以搜索空格:
\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"
是日期格式在您的數據總是'dd.mm.yyyy'(有時'g')和重量'xxxxx.xxg '像'123.00g'?或者像'2014.12.31g'這樣的日期也有可能嗎? – Pshemo