每日10行代码24:在网页中使用正则表达式出错——要注意特殊字符

昨天在爬取人民日报项目中,有个地方是爬取作者的名字,写了正则表达式,但老是返回不了结果。今天检查了下,原来是特殊字符的原因。
网页中源代码是这样的:
我把这段代码复制出来专门测试正则:

</founder-date>
<founder-author>
施小琳
</founder-author>
<founder-title>为红土地描绘新画卷筑牢坚实道德根基(推进新时代公民道德建设)

我想用正则取出施小琳,用的以下的正则表达式:

pat = r'<founder-author>([\s\S]*?)</founder-author>'

写的代码是:

import re

txt = '''
<!--mpproperty <founder-date>
2020-09-11
</founder-date>
<founder-author>
施小琳
</founder-author>
<founder-title>为红土地描绘新画卷筑牢坚实道德根基(推进新时代公民道德建设)
'''
pat = r'<founder-author>([\s\S]*?)</founder-author>'
pat2 =  r'<founder-author>\n(.*?)\n</founder-author>'
author = re.search(pat2,txt)
print(author.group(1))

输出结果:

运行:C:\Python36\python.exe 无标题3.py

施小琳

输出结束,返回值是[0].

结果前后有两个空行,于是我修改了下正则表达式:

pat2 =  r'<founder-author>\n(.*?)\n</founder-author>'

输出结果:

运行:C:\Python36\python.exe 无标题3.py
施小琳
输出结束,返回值是[0].

不错没有换行,达到预想的效果,我马上把正则复制到正式程序中去测试,结果提示:

AttributeError: 'NoneType' object has no attribute 'group'

说明没有找到相关的字符,这就让我相当困惑了。还以为自己程序哪里写错了,于是我加了

print(repr(get_html(url)))

来查看原始字符串:

\r\n<founder-author>\r\n施小琳\r\n</founder-author>\r\n

原来原始的html里还有一个 \r ,我在写正则时没有考虑这个,所以匹配不出来,然而我前面复制出来单独写正则时却匹配出来了,这是因为在可能在复制文本时,文本编辑器把默认的\r给去掉了,所以才造成两边的差异。

总结:一些字符串里常常含有一些不可见字符,在用正则匹配时要注意。解决办法:用repr函数输出原始字符串。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值