我一直在尝试创建一个正则表达式来匹配列表中没有的数字,但是无法弄明白。这可能是不可能的。
例如,给定列表“1,3,13,17,21,30”我希望正则表达式匹配“40”(不在列表中),但不匹配“3”,它在清单。
有谁知道我怎么能够实现这个目标?
答案 0 :(得分:1)
答案 1 :(得分:1)
如果您知道要搜索的字符串中唯一的文本只是实际数字,只需锚定到字符串的开头和结尾,然后使用否定前瞻从列表中排除数字:
(?!^1$|^3$|^13$|^17$|^21$|^30$)^\d+$
这个正则表达式可以减少一点,但我认为在这种形式下你更明显地排除了列表中的匹配,提高了可读性。
但是,如果字符串包含其他文本,您可能会尝试将其锚定到分隔符(例如空格或简单地\ b)
答案 2 :(得分:0)
只需使用您选择的语言中的两个单独的正则表达式,例如:
/\d/ && ! /(1|3|13|17|21|30)/
...或类似的东西,可能你需要锚定在每个根据你匹配的字符串(顺便说一句,你应该在SO上提出这样的问题时提供)。
答案 3 :(得分:0)
我不知道你会在什么情况下使用这个功能,但是如果你知道列表中包含所有数字而你想要过滤的数字也是数字,你为什么不使用它?
python中的(假设list
存储在l
中):
s = {int(s) for s in l.split(',')}
if int(some_num_txt) in s:
pass
else:
pass
它比正则表达式更快,更直观。
答案 4 :(得分:0)
编辑:现在应该工作
\b(?!(1\b|3\b|13\b|17\b|21\b|31\b))\d+\b