正则表达式从逗号分隔的整数列表中排除范围

时间:2017-03-09 04:17:14

标签: regex regex-negation

我想编写一个匹配数字值列表(非范围)的正则表达式,以逗号分隔列表给出,允许范围。不允许空。

对于前: 清单:1,5-10,20,30,40,50-60

期望的输出:

1,20,30,40

我正在尝试正则表达式: (\ d +)(?!((\ d +) - (\ d +)))及其上的一些变量。 前瞻性的否定似乎只是否定了第一个角色,而不是整个群体。

感谢任何帮助。提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以针对您的问题尝试使用正则表达式:

(?<!-)([1-9][0-9]*)((?=,)|$)

(?<!-) - Negative lookbehind which checks `-` not preceding number
([1-9][0-9]*) - getting number
((?=,)|$)  - Or with Positive lookahead and end of input 
              - Positive lookahead checks `,` is follwed by number
              - $ checks end of input

答案 1 :(得分:0)

您需要使用 negative look-behind positive look-ahead 断言

(?<!-|\d)\d+(?=,|$)

<强>详情

  • (?<!-|\d)后视检查不在-digit
  • 之前检查
  • \d+匹配任何数字实例
  • (?=,|$)预测,或字符串结尾

参见 regex demo