正则表达式来增加体重

时间:2010-01-11 23:01:09

标签: java regex

我的HTML具有项目的权重。

<div><b>Item Weight  (0.51 lbs in Warehouse 3)</b></div>

我需要一个正则表达式来获得权重和度量单位。

因此,在上面的HTML中,我需要0.51lbs

我正在使用Java,我有一个帮助方法,只需要立即降低正则表达式!

String regexPattern = "";

String result = "";

Pattern p = Pattern.compile(regexPattern);
Matcher m = p.matcher(text);

if(m.find())
    result = m.group(1).trim();

8 个答案:

答案 0 :(得分:3)

这应该可以解决问题

(\d*\.?\d+)\s?(\w+)

第一场比赛是重量,第二场比赛是计量单位

答案 1 :(得分:2)

如果您事先知道单位,指定单位列表可能会产生更好的结果:

([\d.]+)\s+(lbs?|oz|g|kg) 

答案 2 :(得分:1)

这就是我提出的:

\((?<Weight>\d*\.?\d+)\s(?<Unit>\w+)

这将返回“权重”组中的权重和“单位”组中的度量单位。这可以使用或不使用小数。

我做了几个假设:

  • 必须在第一个括号后立即列出重量。
  • 重量和计量单位之间必须有空格。

如果这些假设并不总是准确的,那么正则表达式将需要更多的调整。

答案 3 :(得分:1)

我认为你想要的模式是:

(\d*\.?\d+)\s*(lbs?|kg)

这将得到正确的数字,你应该用实际测量来锚定它,正如吉米指出的那样,将你的匹配限制在体重测量(或者你关心的其他任何措施)。

答案 4 :(得分:0)

怎么样:

((?:\d+\.)?\d+ \w{3})

答案 5 :(得分:0)

“重量”总是在字符串中吗?如果是这样,一个更好的正则表达式将是:

重量*(\ d +(?:?\ \ d +))。?\ S +(\ W +)

我认为这在Java正则表达式中是有效的,因为它在Perl中有效。以上假定权重&lt; 1将是0.X格式。如果它们可以以小数开头,请使用:

重量。?(\ d ?\ d +)?)\ S +(\ W +)

答案 6 :(得分:-1)

为什么要使用正则表达式?由于您总是依赖某种格式,您还可以假设最后一个括号是权重和位置,并且权重和度量单位的格式总是如此,例如:有空格。

@Test
public void testParseWeight() throws Exception {
    String input = "<div><b>Item Weight  (0.51 lbs in Warehouse 3)</b></div>";
    int startPos = input.lastIndexOf('(');
    int space = input.indexOf(' ', startPos);
    String weight = input.substring(startPos + 1, space);
    String uom = input.substring(space + 1, input.indexOf(' ', space + 1));
    Number parse = NumberFormat.getNumberInstance(Locale.US).parse(weight);
    assertEquals(0.51d, parse.doubleValue(), 0.0d);
    assertEquals("lbs", uom);
}

答案 7 :(得分:-1)

您不应该使用regexp进行HTML ...更好的猜测是使用解析器(如NekoHTML),使用xpath(例如通过jaxen