[英]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.