У меня есть динамические строки, которые иногда будут иметь в них цену, а иногда и нет. Его для craigslist, так что на самом деле нет установленного формата, могут быть запятые, тире и т.д. Вот несколько примеров типичной строки:
Xbox 360 (черный) Elite Console 120GB (Mason City Illinois) $ 200
$ 200 2013 North Trail Camper (RT 202. Манчестер, Мэн) $ 224/мес.
Прицепы для снегоходов (Winthrop/Augusta) $ 40 Ежемесячно
"Великий рождественский подарок" XBox 360 Guitar Hero (Springfied) $ 80
Я пытаюсь разделить строку на заголовок, местоположение и цену. Я могу захватить место:
Pattern p = Pattern.compile("\(([^]*)\)");
Matcher m = p.matcher(title);
Не удалось выяснить, как отделить название и цену. Любая помощь будет оценена по достоинству.
Чтобы захватить число после $
use: \$[0-9]+
regex.
Лично я бы использовал:
\$[-0-9.,]+[-0-9.,a-zA-Z]*\b
Это займет немало не-чисел, но оно также будет расти, как отрицательные значения, $1,000
$1mil
, $1mil
и так далее. \b
в конце будет гарантировать, что он максимально приближается к пространству или новой строке или чему-то еще.
"\\$(\\d+)"
или"\\$(\\d+(\\.\\d+)?)"
- это начало, а затем захватитеmatcher.group(1)
для числа, но ожидайте изрядное количество отладки, чтобы получить такую вещь правильно. Люди слишком непредсказуемы: /