python--正则表达式

2019-03-29  本文已影响0人  思君_4cd3

正则表达式定义:

正则表达式是字符串处理的有力工具,正则表达式使用预定义的模式去匹配一类具有共同特征的字符串,可以快速、准确地完成复杂的查找、替换等处理要求,比字符串自身提供的方法提供了更强大的处理功能。
例如使用字符串对象的split()方法只能指定一个分隔符,而使用正则表达式可以很方便地指定多个符号作为分隔符;使用字符串对象的split()并指定分隔符时,很难处理分隔符连续多次出现的情况,而正则表达式让这一切都变成非常轻松。
正则表达式在文本编辑与处理、网页爬虫之类的场合中有重要应用。

u = "www.baidu.com.cn"
#使用默认分隔符
print (u.split())
#以"."为分隔符
print (u.split('.'))
#分割0次
print (u.split('.',0))
#分割一次
print (u.split('.',1))
#分割两次
print (u.split('.',2)) 
#分割两次,并取序列为1的项
print (u.split('.',2)[1]) 
#分割最多次(实际与不加num参数相同)
print (u.split('.',-1)) 
#分割两次,并把分割后的三个部分保存到三个文件
u1,u2,u3 = u.split('.',2)
print (u1)
print (u2)
print (u3)

结果如下:
['www.baidu.com.cn']
['www', 'baidu', 'com', 'cn']
['www.baidu.com.cn']
['www', 'baidu.com.cn']
['www', 'baidu', 'com.cn']
baidu
['www', 'baidu', 'com', 'cn']
www
baidu
com.cn

正则表达式语法:

正则表达式由元字符及其不同组合来构成,通过巧妙地构造正则表达式可以匹配任意字符串,并完成查找、替换、分隔等复杂的字符串处理任务。

正则表达式基本语法:

基本语法1.png
基本语法2.png
str1=r"sadasfasdfasf"
print(str1)

结果如下:
sadasfasdfasf

str1="sdasd\n\tfasefwas"
print(str1)

结果如下:
sdasd
fasefwas

str1=r"dsad\n\tvdsf"
print(str1)

dsad\n\tvdsf

正则表达式扩展语法:

(http://)?(www\.)?python\.org
1\ \.表示字符串,而.表示任意字节
2\()表示括号内的内容看作是一个整体
3\ ?表示前面的内容出现0次或1次

所以:
python.org

正则表达式模块re处理字符串:

re.match函数:

re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。

re.search方法:

re.search 扫描整个字符串并返回第一个成功的匹配。

re.match与re.search的区别:

re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。

re.sub:

Python 的re模块提供了re.sub用于替换字符串中的匹配项。

compile函数:

compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。


import re;
str1="aaaa hhhhh bbbb nnnnnnnn  bbb"
#arr=re.match("a(.*?)f",str1)
arr=re.search("aaaa .*? bbbb (.*)",str1)
print(arr)
print("gggg::::",arr.group(1))
#print(arr.group(2))
#总结:1.re.search可以使用正则表达式,对字符串进行匹配,
#      ()括号里的内容会送入到group中,使用group(1)获得匹配内容

结果如下:
<_sre.SRE_Match object; span=(0, 29), match='aaaa hhhhh bbbb nnnnnnnn bbb'>
gggg:::: nnnnnnnn bbb

#    正则表达式的书写规则
#    . 表示单个任意字符 如:a、b、c、1、23
#    .* 表示0或者多个字符   ''   'ab'  'abcdsaafdafs'
#    .+ 表示1或者多个字符    'ab' 'adawdsfsadfsadf'
#    -   表示范围【0-9】 【a-z】 【A-Z】
#    |之前或之后的字符   'a|b|c' a  b  c
#    ^后面的字符开头的字符串  ^186.* 1864685646464688
#    $前面的字符结尾的字符串  888$ 34258888 trueey888 888sdaasf
#    ?之前的0个或1个字符 1[0-9]?6   176 16 1776
#    ?  第二个意义:非贪婪(最小匹配)  a(.*?)f   af  asddf  


#   re.match   尝试从字符串起始位置进行匹配,如果开始位置匹配不到,则返回None
#   re.search  对整个字符串进行搜索,返回第一个匹配成功
#   group  "aaaa (.*?) bbbb (.*?)"
import re
str1="dddd aaaa hhhhh bbbb nnnnnnnnnnn bbbb ttttttt"
#arr=re.match("a(.*?)f",str1)
arr=re.sub("aaaa .*? bbbb (.*?)","aaaaaaaaaaaaaaaaaa",str1)
print(arr)

结果如下:
dddd aaaaaaaaaaaaaaaaaannnnnnnnnnn bbbb ttttttt

此篇文章仅用于个人学习笔记使用,如有错误欢迎指正。

上一篇 下一篇

猜你喜欢

热点阅读