我想编写一个正则表达式,它与逗号分隔列表中给出的数值(非范围)列表匹配,允许范围允许。空是不允许的。正则表达式从逗号分隔的整数列表中排除范围
对于前: 列表:1,5-10,20,30,40,50-60
所需的输出:
1,20,30,40
我想正则表达式: (\ d +)(?!((\ d +) - (\ d +)))和一些变化。 前瞻否定似乎否定了第一个字符而不是整个组。
任何帮助表示赞赏。提前致谢。
我想编写一个正则表达式,它与逗号分隔列表中给出的数值(非范围)列表匹配,允许范围允许。空是不允许的。正则表达式从逗号分隔的整数列表中排除范围
对于前: 列表:1,5-10,20,30,40,50-60
所需的输出:
1,20,30,40
我想正则表达式: (\ d +)(?!((\ d +) - (\ d +)))和一些变化。 前瞻否定似乎否定了第一个字符而不是整个组。
任何帮助表示赞赏。提前致谢。
你可以试试下面的正则表达式您的问题:
(?<!-)([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
您需要使用negative look-behind和positive look-ahead断言
(?<!-|\d)\d+(?=,|$)
细节
(?<!-|\d)
向后看,以检查由-
或digit
\d+
比赛中位数任何情况下不前(?=,|$)
前瞻的,
或结束串对于输入'1,5-10,20,300,40,50-60,70'70将被你的正则表达式抛弃。所以,也很好地包括这种情况。 –
@AkashKC啊,我的坏...错过了。感谢您指出:-) – m87
为什么这必须是一个单一的正则表达式? –
你的编程语言是什么? – MahdiY
这只是一个只有正则表达式支持的工具。 –