天天看点

正则匹配含有逗号的文章总数

一,因为英文数字的表达方式,即超过三位数就会加个逗号。比如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.csdn.net/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.

正则匹配含有逗号的文章总数