2017-03-09 131 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

相關問題