我目前只有匹配所有数字的正则表达式。但我还想排除日期中的数字排除日期为-〉08/11/2022的数字,但包括没有日期的数字。这是我的正则表达式:\d+
u3r8eeie1#
区分日期和数字的是“/”或“-”的存在。所以,你可以在你的模式之后使用负lookhead,在你的模式之前使用负lookbehind。
(?<![\d\-\/])\d+(?![\d\-\/])
检查Regex101
flvtvl502#
知道字符串中的日期可能是什么样子或将来可能是什么样子是很重要的。如果格式是并且始终是08/11/2022,则可以执行类似(?<!\/|\d)\d+(?!\/|\d)的操作。负lookbehind (?<!\/|\d)将阻止捕获斜杠后的数字或其他数字(这很重要,否则只有斜杠后的第一个数字不会被捕获,如果没有斜杠,\d+仍将捕获一行中的多个数字)。负lookahead对后面的斜杠和数字做同样的事情。但是,这也会阻止捕获不在日期中但后面有斜杠的数字。而且,并非所有地方都支持负查找。最好是先删除日期,然后再进行具体匹配:((\d{1,2})(\/|\.)(\d{1,2})(\/|\.)(\d{4}|\d{2}))
08/11/2022
(?<!\/|\d)\d+(?!\/|\d)
(?<!\/|\d)
\d+
((\d{1,2})(\/|\.)(\d{1,2})(\/|\.)(\d{4}|\d{2}))
2条答案
按热度按时间u3r8eeie1#
区分日期和数字的是“/”或“-”的存在。所以,你可以在你的模式之后使用负lookhead,在你的模式之前使用负lookbehind。
检查Regex101
flvtvl502#
知道字符串中的日期可能是什么样子或将来可能是什么样子是很重要的。
如果格式是并且始终是
08/11/2022
,则可以执行类似(?<!\/|\d)\d+(?!\/|\d)
的操作。负lookbehind
(?<!\/|\d)
将阻止捕获斜杠后的数字或其他数字(这很重要,否则只有斜杠后的第一个数字不会被捕获,如果没有斜杠,\d+
仍将捕获一行中的多个数字)。负lookahead对后面的斜杠和数字做同样的事情。但是,这也会阻止捕获不在日期中但后面有斜杠的数字。而且,并非所有地方都支持负查找。
最好是先删除日期,然后再进行具体匹配:
((\d{1,2})(\/|\.)(\d{1,2})(\/|\.)(\d{4}|\d{2}))