美文网首页
python--正则表达式

python--正则表达式

作者: 思君_4cd3 | 来源:发表于2019-03-29 20:38 被阅读0次

正则表达式定义:

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

  • split()函数
    语法:str.split(str="",num=string.count(str))[n]
    参数说明:
    str: 表示为分隔符,默认为空格,但是不能为空('')。若字符串中没有分隔符,则把整个字符串作为列表的一个元素
    num:表示分割次数。如果存在参数num,则仅分隔成 num+1 个子字符串,并且每一个子字符串可以赋给新的变量
    [n]: 表示选取第n个分片
    注意:当使用空格作为分隔符时,对于中间为空的项会自动忽略
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
  • 如果以“\”开头的元字符与转义字符相同,则需要使用“\”,或者使用原始字符串。
  • 在字符串前加上字符r或R之后表示原始字符串,字符串中任意字符都不再进行转义。原始字符串可以减少用户的输入,主要用于正则表达式和文件路径字符串的情况,但如果字符串以一个斜线“\”结束的话,则需要多写一个斜线,即以“\”结束。
str1=r"sadasfasdfasf"
print(str1)

结果如下:
sadasfasdfasf

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

结果如下:
sdasd
fasefwas

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

dsad\n\tvdsf

正则表达式扩展语法:

  • 正则表达式使用圆括号“()”表示一个子模式,圆括号内的内容作为一个整体对待,例如'(red)+'可以匹配'redred'、'redredred'等一个或多个重复'red'的情况。
  • 使用子模式扩展语法可以实现更加复杂的字符串处理功能。


    扩展语法.png
  • 最简单的正则表达式是普通字符串,可以匹配自身
    '[pjc]ython'配'python'、'jython'、'cython'
    '[a-zA-Z0-9]'可以匹配一个任意大小写字母或数字
    '[^abc]'可以一个匹配任意除'a'、'b'、'c'之外的字符
    'python|perl'或'p(ython|erl)'都可以匹配'python'或'perl'
  • 子模式后面加上问号表示可选。
    r'(http://)?(www.)?python.org'只能匹配'http://www.python.org'、'http://python.org'、'www.python.org'和'python.org'
  • '^http'只能匹配所有以'http'开头的字符串
  • (pattern)*:允许模式重复0次或多次
  • (pattern)+:允许模式重复1次或多次
  • (pattern){m,n}:允许模式重复m~n次
(http://)?(www\.)?python\.org
1\ \.表示字符串,而.表示任意字节
2\()表示括号内的内容看作是一个整体
3\ ?表示前面的内容出现0次或1次

所以:
python.org

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

  • Python标准库re模块提供了正则表达式操作所需要的功能


    标准库.png
re.match函数:

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

  • 函数语法:
    re.match(pattern, string, flags=0)


    函数1.png
  • 匹配成功re.match方法返回一个匹配的对象,否则返回None。
  • 可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。


    函数2.png
re.search方法:

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

  • 函数语法:
    re.search(pattern, string, flags=0)


    函数3.png
  • 匹配成功re.search方法返回一个匹配的对象,否则返回None。
  • 可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。


    函数4.png
re.match与re.search的区别:

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

re.sub:

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

  • 语法:
    re.sub(pattern, repl, string, count=0)


    函数5.png
compile函数:

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

  • 语法格式为:
    re.compile(pattern[, flags])

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

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

相关文章

网友评论

      本文标题:python--正则表达式

      本文链接:https://www.haomeiwen.com/subject/gtycbqtx.html