我的HTML具有项目的权重。
<div><b>Item Weight (0.51 lbs in Warehouse 3)</b></div>
我需要一个正则表达式来获得权重和度量单位。
因此,在上面的HTML中,我需要0.51
和lbs
我正在使用Java,我有一个帮助方法,只需要立即降低正则表达式!
String regexPattern = "";
String result = "";
Pattern p = Pattern.compile(regexPattern);
Matcher m = p.matcher(text);
if(m.find())
result = m.group(1).trim();
答案 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)