以下类型的字符串
的正则表达式是什么E.g。 1,2,3,4..5,< 6,< = 7,> 8,> = 9 这里我使用equals,range( - ),sequence(..)&大于/等于小于100的数字的运算符。这些数字用逗号分隔。
请帮我写一个正则表达式。提前谢谢。
答案 0 :(得分:3)
这样的事情怎么样:
^(\d+(-|\.\.)|[<>]=?)?\d+$
使用Python的示例:
>>> import re
>>> pattern = '^(\d+(-|\.\.)|[<>]=?)?\d+$'
>>> for s in '1, 2-3, 4..5, <6, <=7, >8, >=9'.split(','):
... print(re.match(pattern, s.strip()).group(0))
...
1
2-3
4..5
<6
<=7
>8
>=9
要清楚,此正则表达式仅匹配列表中的一个元素。我强烈建议您预处理您的输入,方法是将其分为逗号并修剪单个元素,就像我在上面的示例中所做的那样。即使这不是绝对必要的(你可以将这个逻辑添加到我在这里给出的正则表达式),但它会更有效和可读。
正则表达式如何运作:
\d+$
。^(...)?\d+$
。\d+(-|\.\.)
匹配一个数字后跟一个或两个句号。<=?
匹配"<"
以及"<="
。同样适用于>=?
。我们可以将其缩写为[<>]=?
。使用管道(|
)组合这两个选项,表示选择,我们得到
^(\d+(-|\.\.)|[<>]=?)?\d+$
答案 1 :(得分:0)
试试这个表达式:
^(?:\d+(?:(?:\.\.|-)\d+)?|[<>]=?\d+)(?:,\s*\d+(?:(?:\.\.|-)\d+)?|[<>]=?\d+)*$
它由
的交替组成\d+(?:(?:\.\.|-)\d+)?
代表一个数字后跟一个范围或序列的可选表达式,[<>]=?\d+
了解不平等。在第二部分中重复了这一点,并为列表添加了逗号和可选空格。
对于仅允许小于100的数字的条件,您可以将\d+
替换为[1-9]\d
1..99或(?:0|[1-9]\d)
替换为0..99。
答案 2 :(得分:0)
你应该完全使用正则表达式工具,如regex buddy。
您是否尝试验证字符串通常看起来像样本?
1, 2-3, 4..5, <6, <=7, >8, >=9
匹配
\s*(\d+|\d+-\d+|\d+\.\.\d+|[<>]=?\d+)\s*(,\s*(\d+|\d+-\d+|\d+\.\.\d+|[<>]=?\d+)\s*)*
分割,
然后将每个部分与
\s*(\d+|\d+-\d+|\d+\.\.\d+|[<>]=?\d+)\s*
那是: 修剪的空白区域,匹配数字或数字的虚线数字,或数字点点数字,或小于或大于等于可选等于数字的数字。
你可以将其压缩到更难阅读:
\s*((\d+(-|\.\.)|[<>]=?)?\d+)\s*
如果您希望所有数字仅为1-2位数字,请将所有\d+
更改为\d{1,2}
或\d\d?