Выражения регулярных выражений для сопоставления сравнений

Можно ли создать регулярное выражение, которое соответствует сравнению, например, меньше или больше? Например, сопоставьте все значения в долларах меньше 500 долларов.

Я бы использовал это в интернет-магазинах, которые перечисляют множество товаров на одной странице, но не предоставляют возможности сортировки по цене. Я нашел страницу поиска по расширению регулярного выражения для Chrome и пытаюсь выяснить, есть ли способ использовать регулярное выражение для сопоставления любых строк на странице, начинающихся со знака доллара, за которым следует любое число, меньшее, чем число, которое я указываю.


person Joe M.    schedule 29.03.2012    source источник


Ответы (3)


Это должно сработать для вас \$[1-4]?\d?\d\b.

Пояснение:

r"""
\$       # Match the character “$” literally
[1-4]    # Match a single character in the range between “1” and “4”
   ?        # Between zero and one times, as many times as possible, giving back as needed (greedy)
\d       # Match a single digit 0..9
   ?        # Between zero and one times, as many times as possible, giving back as needed (greedy)
\d       # Match a single digit 0..9
\b       # Assert position at a word boundary
"""
person Narendra Yadala    schedule 29.03.2012
comment
Обратите внимание, что менее 500 означает до 499,99, но не более: › Также вы не учли значения в центах. - person Benjamin Udink ten Cate; 29.03.2012
comment
@BenjaminUdinktenCate Это регулярное выражение можно легко изменить, если также необходимо учитывать значения центов. - person Narendra Yadala; 29.03.2012
comment
это также соответствует значениям более 500 долларов. Изменить: уже не так, извините :) - person michele b; 29.03.2012
comment
@micheleb Не могли бы вы привести пример, который соответствует более 500? Я не думаю, что это соответствует любому значению выше 500. - person Narendra Yadala; 29.03.2012
comment
Я не обновился до того, как вы добавили границу слова в конце - person michele b; 29.03.2012
comment
@micheleb Не проблема. Я хочу, чтобы SO обновлял ответы асинхронно: P - person Narendra Yadala; 29.03.2012

Это может сделать то, что вам нужно: ^(\$[1-4]?\d?\d)$. Это будет соответствовать любому значению между $1 и $499.

Как упоминалось выше, если вы хотите сопоставить даже десятичные значения, вы можете использовать что-то вроде этого: ^(\$[1-4]?\d?\d(\.\d{2})?)$. При этом числовая проверка в идеале должна выполняться с использованием реальных математических операций, а не регулярных выражений.

person npinti    schedule 29.03.2012
comment
@BartKiers: Да, ты прав. Я изменил свой результат и предоставил еще один для центов. - person npinti; 29.03.2012

Изменить: это слишком сложно, но оно также будет соответствовать любому значению строго меньше 500.

\$[1-4]\d{2}(\.\d{2})?$|\$\d{1,2}(\.\d{2})?$

если вам нужно также сопоставить $500, добавьте еще |\$500(\.00)?$

Это соответствует:

\$            the dollar symbol
[1-4]         followed by a digit between 1 and 4
\d{2}         followed by exactly 2 digits
(\.\d{2})?    optionally --> ()? followed by a dot --> \. and exactly 2 digits
$             followed by end of line (may be replaced with \b for word boundaries)
|             or
\$\d{1,2}     the dollar symbol followed by any two digits
(\.\d{1,2})?$ again optionally followed by cents, followed by end of line
person michele b    schedule 29.03.2012