2016-05-13 3 views
-1

Что регулярное выражение будет работать, чтобы соответствовать только определенные строки, которые имеют диапазон значений (например, 20-25 дней) в тексте исходных данных (образец ниже):фильтра линии на основе диапазона стоимости, с использованием регулярных выражений

[product-1][arbitrary-text][expiry-17days] 
[product-2][arbitrary-text][expiry-22days] 
[product-3][arbitrary-text][expiry-29days] 
[product-4][arbitrary-text][expiry-25days] 
[product-5][arbitrary-text][expiry-10days] 
[product-6][arbitrary-text][expiry-12days] 
[product-7][arbitrary-text][expiry-20days] 
[product-8][arbitrary-text][expiry-26days] 

'product' и 'expiry' текст является статическим (не изменяется), а их соответствующие значения изменяются.
'arbitrary-text' также отличается для каждой линии/продукта. Поэтому в приведенном выше примере регулярное выражение должно соответствовать только/возвратным линиям, срок действия которых истекает через 20-25 дней.

Ожидаемые регулярное выражение соответствует:

[product-2][arbitrary-text][expiry-22days] 
[product-4][arbitrary-text][expiry-25days] 
[product-7][arbitrary-text][expiry-20days] 

Спасибо.

ответ

0

.*\D2[0-5]d.*

.* соответствует всем.

\D предотвращает действительные совпадения чисел, таких как 123 и 222.

2[0-5] охватывает диапазон.

d поэтому он не соответствует номеру продукта.

я вставил образец текста в http://regexr.com

Это полезный инструмент для построения регулярных выражений.

+0

Спасибо, будет только соответствовать цифрам. Я бы хотел сопоставить всю строку с этим диапазоном дней. – Nick

1

проверили этот один, и он работает, как ожидалось:

/[2-2]+[0-5]/g 

[2-2] будет соответствовать число между 2 и 2 .. ограничение собирается передать диапазон 20es.

[0-5] второго число должно быть между 0 и 5 «второй цифрой»

{2} limit to 2 digits. 

Edit: чтобы соответствовать всему символу строки для полукокса, это shoudl сделать это для вас.

\[\w*\-\d*\]\s*\[\w*\-[2-2]+[0-5]\w*\] 

Edit2: обновлен для учета произвольного текста ...

\[(\w*-\d*)\]+\s*\[(\w*\-\w*)\]\s*\[(\w*\-[2-2]+[0-5]\w*)\] 

Edit3: Обновленный, чтобы соответствовать любому символу для произвольного-текста.

\[(\w*-\d*)\]\s*\[(.*)\]\s*\[(\w*\-[2-2][0-5]\w*)\] 
+0

Он работает, за исключением того, что он не учитывает «произвольный текст» между идентификатором продукта и истечением срока действия. «произвольный текст» может быть любой и любой длины, поэтому я не уверен, как ваше регулярное выражение будет адаптироваться к нему. Этот мод не работает: '\ [\ w * \ - \ d * \]. +? \ [\ W * \ - [2-2] + [0-5] \ w * \] g' – Nick

+0

это не хватало косой черты «g» gloabl ... попробуйте последнюю. – zee

+0

Спасибо за очередную попытку. К сожалению, регулярное выражение «произвольный текст» ('\ w * \ - \ w *') не будет работать, потому что этот текст может содержать любые символы (а не только альфа или цифры). – Nick

0

Вы можете попробовать это:

/(.*-2[0-5]days\]$)/gm 

попробуйте HERE

1

Пожалуйста, проверьте следующее регулярное выражение:

/(.*-2[0-5]days\]$)/gm

(   # start capturing group 
    .*   # matches any character (except newline) 
    -   # matches hyphen character literally 
    2   # matches digit 2 literally 
    [0-5]  # matches any digit between 0 to 5 
    days  # matches the character days literally 
    \]   # matches the character ] literally 
    $   # assert position at end of a line 
)    # end of the capturing group 

D o обратите внимание на использование -2[0-5]days, чтобы убедиться, что оно не соответствует:

[product-7][arbitrary-text][expiry-222days] # won't match this