我想编写一个匹配数字值列表(非范围)的正则表达式,以逗号分隔列表给出,允许范围。不允许空。
对于前: 清单:1,5-10,20,30,40,50-60
期望的输出:
1,20,30,40
我正在尝试正则表达式: (\ d +)(?!((\ d +) - (\ d +)))及其上的一些变量。 前瞻性的否定似乎只是否定了第一个角色,而不是整个群体。
感谢任何帮助。提前致谢。
答案 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