2015-02-22 4 views
1

Я пытаюсь очистить цены от любого заданного URL. Я использую CsQuery и для жизни, я не могу найти лучший способ найти все элементы на странице, которая может быть ценой. Бонус будет определять наиболее вероятную цену по размеру/цвету теста и насколько он близок к началу страницы. Я думал, возможно, глядя на решение Regex, но я не уверен, что это правильный способ пойти с CsQuery.CsQuery: Поиск цен на странице

ответ

1

Ну, если знак валюты присутствует, вы можете сделать что-то вроде.

(?:\$|\£)(\d+(?!\d*,\d)|\d{1,3}((, ?)\d{3}?)?(\3\d{3}?){0,4})(\.\d{1,2})?(?=[^\d,]|, (?!\d{3,})|$) 

(?:\$|\£)  -- matches literal currency simbols. You can remove this 
        if you can't count on the presence of currency symbols, 
        but it's a great anchor if you can 
(\d+   -- matches any number of digits 
    (?!\d*,\d)  as long as not followed by comma digit 
| 
    \d{1,3}  -- otherwise matches betweein 1 and 3 digits 
    (
    (, ?)  -- looks for a comma followed by a possible space 
        captures as \3 
    \d{3}?) -- followed by 3 digits 
    ?   -- zero or one times 
    (\3  -- looks for the same pattern of comma with or without space 
    \d{3}? -- followed by 3 digits 
){0,4}) -- between 0 and 4 times, more on that below 
(\.   -- literal period 
    \d{1,2}  -- followed by one or two digits 
)?   -- zero or one times (so, optional) 
(?=[^\d,]|, (?!\d{3,})|$) 

Другой вещь, которую вы могли бы сделать, чтобы ограничить количество повторений разделителей групп может быть, это может помочь отсеять высокие цифры, которые не являются вероятными ценами. Если вы не ожидаете чего-либо более 999,999, вы можете это сделать (но если вы имеете дело с иностранной валютой, инфляция сделала несколько астрономически высоких - буханка хлеба в Зимбабве стоит пятьдесят миллионов).

Для удобства чтения, я покажу вам, как ограничить количество повторений до 7

Измените 4 (в целом регулярное выражение единственными 4) до 6, (числа, которое хочет -1, потому что мы ищите 1 заранее, чтобы установить шаблон запятой).

(?:\$|\£)(\d+(?!\d*,\d)|\d{1,3}((, ?)\d{3}?)?(\3\d{3}?){0,6})(\.\d{1,2})?(?=[^\d,]|, (?!\d{3,})|$) 

Вы можете увидеть это в действии на: https://regex101.com/r/oU2nW2/1

+0

Спасибо, я думаю, что у меня есть регулярное выражение, которое будет тянуть цены, но я не могу показаться, чтобы получить CSQuery искать весь текст и посмотреть, если регулярное выражение Матчи. Кто-нибудь имеет пример CsQuery? Я также не уверен, что regex - лучший метод для CSQuery или если что-то более эффективное существовало. – mrfleck

Смежные вопросы