регулярное выражение, чтобы набрать вес - PullRequest
1 голос
/ 12 января 2010

У меня есть 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();

Ответы [ 8 ]

4 голосов
/ 12 января 2010

Это должно сработать

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

Первым совпадением будет вес, а вторым - единица измерения

3 голосов
/ 12 января 2010

, если вы знаете единицы измерения заранее, указание списка единиц может дать лучшие результаты:

([\d.]+)\s+(lbs?|oz|g|kg) 
1 голос
/ 12 января 2010

Я думаю, что вы хотите шаблон:

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

Это позволит получить правильные числа, и вы должны привязать их к фактическим измерениям, как указал Джимми, чтобы ограничить ваши соответствия измерениями веса (или любыми другими показателями, которые вас интересуют).

1 голос
/ 12 января 2010

Вот что я придумал:

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

Возвращает вес в группе «Вес» и единицу измерения в группе «Единица». И это будет работать с десятичной дробью или без нее.

Я сделал пару предположений:

  • Вес должен быть указан сразу после первой круглой скобки.
  • Между весом и единицей измерения должен быть пробел.

Если эти предположения не всегда точны, то регулярное выражение нуждается в доработке.

0 голосов
/ 12 января 2010

«Вес» всегда будет в строке? Если это так, лучшим регулярным выражением будет:

Вес * (\ D + (?:.? \ \ D +)). \ S + (\ W +)

Я предполагаю, что это допустимо в регулярных выражениях Java, поскольку оно работает в Perl Выше предполагается, что веса <1 будут отформатированы в 0.X. Если они могут начинаться с десятичных знаков, используйте это: </p>

Вес. ? (\ Д .? \ D +)?) \ S + (\ W +)

0 голосов
/ 12 января 2010

Вы не должны использовать regexp для HTML ... Лучше было бы использовать парсер (например, NekoHTML ) с xpath (например, через jaxen )

0 голосов
/ 12 января 2010

Зачем использовать регулярные выражения? Поскольку вы всегда полагаетесь на какой-то формат, вы также можете предположить, что последние скобки - это вес и местоположение, и что вес и единица измерения всегда форматируются таким образом, например, с пробелами.

@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);
}
0 голосов
/ 12 января 2010

А как же:

((?:\d+\.)?\d+ \w{3})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...