正则表达式sub,rearch结合使用处理小说文本
Posted 肥宅Sean
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式sub,rearch结合使用处理小说文本相关的知识,希望对你有一定的参考价值。
之前写过很多关于用python进行爬取小说的爬虫。
但是我们发现有些小说的章节里面,标题不同的作者总是用不同方法来进行标记。
考虑到现在手机的阅读器,分章节的时候,很有可能就不能识别。
一般来说,目前手机阅读器识别不同的章节进行分章的时候,是识别出“第”跟“章”两个字,来结合进行判断的。
所以对于不同的章节表达方法,我们需要做一定的处理(这样让我们之后去找章节的时候会比较方便)。
比如,我最近就爬到一本小说。这个小说的章节方法如下标识
1、
像上面这样的章节的话,一般阅读器都是很难去识别的,原因很简单。因为在小说内容中也会出现类似的字样。 一个数 再加上“、”符号
为了实现对于这样的内容的处理,下面使用正则表达式来处理。
我一开始是想能不能直接用sub去减掉(因为这样可能就只需要三四行代码就可以搞定了。)后来发现好像不行,因为需要把数值也提取出来。
所以,我们的目标很简单,就是把
1、变成 第1章
代码如下;
# @Time : 2018/5/23 13:04
# @Author : Sean
# @Site :
# @File : test.py
# @Software: PyCharm
import re
name = '小说名字.txt'
url = "D:/Code/Python/normal/Noval/"
with open(url + name, 'r') as f:
strings = f.readlines()
pattern = re.compile('(\d+)、')
for i in range(len(strings)):
a = re.search(pattern, strings[i])
if a and len(strings[i]) < 20:
strings[i] = re.sub(pattern, '第' + a.groups()[0] + '章', strings[i])
with open(url + name, 'w') as f:
f.write('\n'.join(strings))
以上是关于正则表达式sub,rearch结合使用处理小说文本的主要内容,如果未能解决你的问题,请参考以下文章
正则表达式:如何将 re.sub 与可变数量的元素一起使用?