正则表达式学习

时间:2019-09-17
本文章向大家介绍正则表达式学习,主要包括正则表达式学习使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
# In[]

# 正则表达式Regx ----  字符串特殊匹配方式 设置格式进行匹配
import requests
import re
import os

text = '''2月份,各地继续落实地方调控主体责任,坚持因城施策,促进房地产市场平稳健康发展。
据初步测算,4个一线城市新建商品住宅销售价格环比上涨0.3%,涨幅比上月回落0.1个百分点。
其中:北京下降0.2%,上海和广州分别上涨0.3%和1.1%,深圳持平。
二手住宅销售价格环比上涨0.15%。其中:北京和深圳分别上涨0.2%和0.5%,上海和广州分别下降0.1%和0.2%。
31个二线城市新建商品住宅销售价格环比上涨0.7%,涨幅连续三个月相同;
二手住宅销售价格环比下降20.21%,降幅比上月扩大0.1个百分点。
35个三线城市新建商品住宅销售价格环比上涨10.4%,涨幅比上月回落0.2个百分点;
二手住宅销售价格环比上涨0.2%,涨幅与上月相同18%,22.65431%。'''

# 提取出文段中的百分比数

# =============================================================================
# '''步骤分析:
# 1. 有共同的特点---  都是以%结尾
# 2. %前面是数值
# 3. 数值之前是有.
# 4. 点之前又是数值的
# '''
# =============================================================================

re.findall(r'\d+\.?\d+%',text)

# 观察到其中有整数百分比  还有小数百分比  所以在\.之后加?表示小数点有就匹配到,没有就跳过
# \d  表示匹配数值  加号修饰前一个字符 可以重复一次或无限次


# 小练习: 提取出上面文段中的某线城市

re.findall(r'.线城市',text)
re.findall(r'[一二三四五六七八九十]线城市',text)
re.findall(r'[\d.\d]*%',text)


# 小练习
s = 'a你好ca如何cxxxa你你ca你何c'

# 提起出其中的‘a你好c’ ‘a如何c’ 
re.findall(r'(a(你好|如何)c)',s)



# In[]

text1 = '''西楼尘 看过  2018-07-02
最费力的成长留在树上的只有壳,最狰狞的伤口留在皮肤的只有疤。最动人的烟火绽在空中看不到,最深沉的感谢飘进风中听不清。你教我食物最美味的吃法,却教我获得食物最羞耻的手法;我学会祈祷最灵验的手势,也学会用来祈祷最不齿的心愿。我在商店里偷换掉童年,你在泥土里掩埋了伤疤,而我们组成了家。

举报

7596 有用 凌睿 看过  2018-08-02
或是被第三者插足,或是不受父母待见,或是被辞退,或是父母根本不想把Ta生下来……这群被抛弃的人们,却共同组成了最温馨、最和睦、最融洽、最可爱的家庭。 他们或是失业,或是工伤,或是以偷窃维持生计,或是在风俗店工作,他们生活在社会的最底层,他们缺少物质财富,精神生活却无比充实。 他们每个人之间都没有血缘关系,但每个人都比原来的家庭过得更加快乐。 结婚不意味着幸福,被丈夫抛弃也能子孙满堂; 生了孩子不一定就是母亲,没有生育能力也可以给予母爱。 柴田治以为什么都教不了孩子,却教会了他什么叫青春期。 亚纪远离了富有的家庭,因为4号先生的肩膀更让她感到温暖。 由里遭到亲生父母虐待,却有一位素不相识的人愿意以失去工作的代价保护她。 富有富的活法,穷有穷的活法。我们在丰衣足食中颓废度日,他们在贫困交加中感受大爱无疆。
'''
# \A 表示提取字符串的开头或者结尾

"""
问题: 提取其中的用户名 
1. 不同的是第一个西楼尘之前没有空格
2. 所以用到 或与非 以及  首字符的提取

"""
re.findall(r'\A(.*) 看过',text1)  # 提取到了开头 
re.findall(r'有用 (.*) 看过',text1)  # 提取到中间部分

# 将上面那两个很合并  用或连接  |
re.findall(r'(有用 |\A)(.*) 看过',text1)

# 提取其中的日期

re.findall(r'\d{4}-\d{2}-\d{2}',text1)
re.findall(r'\d+-\d+-\d+',text1)

# In[]
#v =========================================================================================

## 爬取网站中的小说(剑来): http://www.shuquge.com/txt/8659/index.html

# 首先获取网页的源代码

import requests 
import re
import os

url = 'http://www.shuquge.com/txt/8659/'

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64)\
           AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 \
           Safari/537.36' }

r = requests.get(url , headers = headers)  # 获取网页的源代码
r.text
r.encoding = 'utf-8'  # 发现得到的网页源代码有乱码部分 , 重新赋值编码格式 
r.text


# 使用正则表达式提取网址中需要的  就是随你改变网页变化的部分
chate_link = re.findall(r'<dd><a href="(.*)".*</a></dd>',r.text)

# 拼接  将固定不变的部分和变换的部分进行拼接
a = 'http://www.shuquge.com/txt/8659/'
for i in chate_link:
    print(a + i)







# 把章节列表页代码打包成函数
#L = []
def list1(url):
# =============================================================================
#    """传入章节列表网址, 提取出对应小说的章节列表"""
# =============================================================================
    headers ={
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'  
    }
    r = requests.get(url,headers = headers)
    r.encoding = 'utf-8'
    # 使用正则表达式提取网址中需要的  就是随你改变网页变化的部分
    chate_link = re.findall(r'<dd><a href="(.*)".*</a></dd>',r.text)  
    # 进行循环 将得到的
#    for i in chate_link:
#        b = url+i
#        L.append(b)
#    return L
    return chate_link

url = 'http://www.shuquge.com/txt/8659/'
list1(url)
    
# In[]
# 例如爬去其中一章节的内容

url = 'http://www.shuquge.com/txt/8659/15605645.html'

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64)\
           AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 \
           Safari/537.36'}

r = requests.get(url , headers = headers)

r.encoding = 'utf-8'

r.text

wenben = re.findall(r'<div id="content" class="showtxt">(.*?)</div>',r.text,re.S)[0]
# re.S 表示换行抓取 否则无法获取到结果  并且需要改为懒惰模式 、
# 因为需要的部分在最近的</div>之间   结果为列表 提取出来进行后续的操作

# 删除掉多余的字符   注意其中的换行符 \r<br />  可以改变为 \n

zuizhong = wenben.replace(' ','').replace('\r<br/>','\n').\
replace('\r<br />','\n').replace('<br />','').replace('<div id="content"\
       class="showtxt">','')
# 利用正则表达式   提取标题 

title = re.findall(r'<h1>(.*)</h1>',r.text)[0]




# 将得到的文本导出至本地

# open() 函数导入和导出

f = open('剑来.txt','w')  # 在工作路径下创建文件

# 利用open函数写入文件

f.write(title)  # 写入标题
f.write('\n\n')   # 加入换行符
f.write(zuizhong)  # 写入整理好的文件

f.close()  # 关闭写入函数




# 将上面的代码整理为函数形式调用

def  fun2(url):
    
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64)\
           AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 \
           Safari/537.36'}

    r = requests.get(url , headers = headers)
    
    r.encoding = 'utf-8'
    
    
    wenben = re.findall(r'<div id="content" class="showtxt">(.*?)</div>',r.text,re.S)[0]
    # re.S 表示换行抓取 否则无法获取到结果  并且需要改为懒惰模式 、
    # 因为需要的部分在最近的</div>之间   结果为列表 提取出来进行后续的操作
    # 删除掉多余的字符   注意其中的换行符 \r<br />  可以改变为 \n
    
    zuizhong = wenben.replace(' ','').replace('\r<br/>','\n').\
    replace('\r<br />','\n').replace('<br />','').replace('<div id="content"\
           class="showtxt">','')
    
    # 利用正则表达式   提取标题 
    title = re.findall(r'<h1>(.*)</h1>',r.text)[0]
    return title , zuizhong

fun2('http://www.shuquge.com/txt/8659/2324755.html')




# In[]


# =============================================================================

# 将上面的代码进行整合  变为一个函数可以一次性爬取该文章的所有章节

# 获取章节
zhangjie = list1("http://www.shuquge.com/txt/8659/")
# 创建文件夹
import os
if not os.path.exists('剑来'): 
    # 创建名为剑来的文件夹
    # 判断是否存在  如果存在,创建  如果不存在则不返回任何值
    os.mkdir("剑来")

# 对章节列表进行拼接
url = "http://www.shuquge.com/txt/8659/"
n = 1
for i in zhangjie:
    print(url + i)
    a = url + i
    title,zuizhong = fun2(a)
    # 此时有了标题和文章内容  
    # 建立函数 将得到的标题和文章内容 放置文件夹中 并给予文章名
    
    f = open('剑来/'+str(n)+'_'+title+".txt",'w',encoding = 'utf-8')  
    # '剑来/'表示本地文件夹 加上文件名     此时得到的文件名称是无序的 
    # 在文件的前面加上数字进行排序   str(n) 表示狮子不能直接接在字符串上,需转换为字符型
    # 写入内容
    f.write(title)
    f.write('\n\n')
    f.write(zuizhong)
    n+ = 1  # 表示每一章结束在文件前加的数字上加1  实现自动排序

  

原文地址:https://www.cnblogs.com/manjianlei/p/11537527.html