如何用正则表达式精准提取字符串中的REVDATE值
精准提取REVDATE日期值的正则方案
问题分析
你目前用的正则表达式 ((?<=REVDATE=).*(?=[^>])) 之所以会带出一堆多余的HTML标签内容,是因为.*会贪婪匹配从REVDATE=开始的所有字符,直到遇到第一个非>的字符——而你的字符串里REVDATE后面紧跟着的是>(也就是转义的>),所以匹配范围被拉长,把后面的标签也包含进来了。
直接有效的解决方案
既然你的目标日期是固定的8位数字(YYYYMMDD格式),直接精准匹配这8位数字就好,用这个正则:
(?<=REVDATE=)\d{8}
简单解释下这个正则的逻辑
(?<=REVDATE=):这是正向零宽断言,用来确认我们要提取的内容前面一定是REVDATE=,但不会把这几个字符包含到最终结果里。\d{8}:专门匹配8个连续数字,正好对应你的日期格式,完美避开后面的转义符和标签内容。
用这个正则跑你的字符串,就能得到你想要的结果:['20200905','20200905','20200905']。
如果之后遇到日期格式有变动的情况(比如不是严格8位),也可以改成匹配到下一个>之前的内容,写法是 (?<=REVDATE=)[^>]+,不过就你的当前场景来说,\d{8}是最精准高效的选择。
内容的提问来源于stack exchange,提问作者Samtech
相关产品推荐
相关产品推荐

