一,因为英文数字的表达方式,即超过三位数就会加个逗号。比如5,356。但是小于等于三位数时没有逗号,因此在写爬虫用正则解析文章数量时出现了这个问题,刚开始没有认真思考----现在记录一下。
1,第一次遇到的:
Showing 1–200 of 3,129 results
正则表达式为:\d+,\d+ (\d表示匹配数字,+表示匹配多个)
匹配结果:
这里推荐一个好用的在线正则表达式测试:http://tool.oschina.net/regex/ 比较方便。
但是这里忽略了一个事实,当文章数小于1000的时候,匹配出现问题:
例子:
Showing 1–200 of 229 results
将会出现匹配错误。匹配不到。
2,这里我将正则表达式修改了为:\d+(,)?\d+ (?表示匹配前面的字符一个或0个)
又出现了了错误:这里因为可以(,)?可以匹配一个或0个逗号的缘故导致200被匹配出来,,,
3.第三次,因为of字符是固定的,我在正则表达式中添加进去了:of \d+(,)?\d+
这时候匹配正确但增加了of,虽然可以处理字符达到要求但还是继续
4,第四次正则表达式:(?!of) \d+(,)?\d+ (?!大概的的意思是不匹配后面的字符串)这里加上后面的单词results更准确,
参考链接:https://blog.youkuaiyun.com/xuyangxinlei/article/details/81359366
:https://www.cnblogs.com/snailpen/archive/2018/06/14/9184405.html
https://www.cnblogs.com/chip/p/4278135.html 正则表达式的先行断言(lookahead)和后行断言(lookbehind)
OK到此可以匹配出来了。
但是还是发现了一处BUG,不能匹配一位数的文章,
因此第五次更改:正则表达式:(?!of) \d+,?\d* (?=results)
这次可以了,也去掉了of和results.