2017-03-09 134 views
0

我想编写一个正则表达式,它与逗号分隔列表中给出的数值(非范围)列表匹配,允许范围允许。空是不允许的。正则表达式从逗号分隔的整数列表中排除范围

对于前: 列表:1,5-10,20,30,40,50-60

所需的输出:

1,20,30,40

我想正则表达式: (\ d +)(?!((\ d +) - (\ d +)))和一些变化。 前瞻否定似乎否定了第一个字符而不是整个组。

任何帮助表示赞赏。提前致谢。

+1

为什么这必须是一个单一的正则表达式? –

+1

你的编程语言是什么? – MahdiY

+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 
0

您需要使用negative look-behindpositive look-ahead断言

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

细节

  • (?<!-|\d)向后看,以检查由-digit
  • \d+比赛中位数任何情况下不前
  • (?=,|$)前瞻的,或结束串

看到regex demo

+0

对于输入'1,5-10,20,300,40,50-60,70'70将被你的正则表达式抛弃。所以,也很好地包括这种情况。 –

+0

@AkashKC啊,我的坏...错过了。感谢您指出:-) – m87

相关问题