使用正则表达式基于值范围过滤行

时间:2016-05-13 02:34:53

标签: regex

什么正则表达式只能匹配文本原始数据中具有值范围(例如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]

感谢。

4 个答案:

答案 0 :(得分:1)

测试了这个,它按预期工作:

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

[2-2]将匹配2到2之间的数字..以限制通过20es范围。

[0-5]第二个数字需要介于0和5之间,第二个数字需要介于"

{2} limit to 2 digits.

编辑:为了匹配char的整行char,这个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*)\]

答案 1 :(得分: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 

请注意使用-2[0-5]days以确保其不匹配:

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

答案 2 :(得分:0)

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

.*匹配所有内容。

\D会阻止123和222之类的数字成为有效匹配。

2[0-5]涵盖范围。

d因此与产品编号不符。

我将示例文本粘贴到http://regexr.com

这是构建正则表达式的有用工具。

答案 3 :(得分:0)

你可以尝试这个:

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

试试HERE