正则表达式学习

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

(.*)

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

(.*)

',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 实现自动排序

  

你可能感兴趣的:(正则表达式学习)