ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python正则表达式

2021-12-14 18:05:25  阅读:180  来源: 互联网

标签:Bat 匹配 re Python compile 正则表达式 wo findall


一.实例

import re
NameRe = re.compile(r'\d{3}-\d{3}-\d{4}') #创建匹配对象,r为原始字符
name = NameRe.search("asdasdsadasd") #匹配失败返回None,成功返回Match对象,就一个
print(name.group()) #返回匹配到的内容

#直接过滤
result = re.match('You', 'Young Frankenstein')
youpattern = re.compile('You')
result = youpattern.match('Young Frankenstein')


NameRe = re.compile(r'(\d{3})-(\d{3}-\d{4})') #分组
print(name.group(1)) #1返回1组,0和不写,返回所有匹配到的
a,b = mo.groups() #分别获得变量

name = NameRe.findall('asdasdas') #返回所有匹配结果,列表套元组

re.complir(r'abc|bcd') #匹配其中一个,返回第一次匹配到的值
re.compile(r'Bat(man|mobile|copter|bat)') #Bat可以复写
re.compile(r'Bat(wo)?man') #wo可有可无,匹配问好前的分组0次或1次
re.compile(r'Bat(wo)*man') #匹配之前的分组0次或无数次
re.compile(r'Bat(wo)+man') #之前的分组1次或多次
re.compile(r'Bat(wo){3}') #之前的分组3次
re.compile(r'Bat(wo){1,3}') #之前的分组1次或3次
re.compile(r'Bat(wo){3,5}?') #在分组的时候,实现非贪心匹配,进来匹配最短
re.compile(r'Bat[0-5]') #0-5之前
re.compile(r'[a-zA-Z0-9]') #匹配所有字母和数字
re.compile(r'Bat[^0-5]') #取反
re.compile(r'^Bat&') #开始到结束都是Dat的
re.compile(r'.Bat') #除了换行之外的所有字符
re.compile(r'.Bat(.*)') #匹配所有字符串
re.compile(r'.Bat(.*)?') #匹配所有字符串,非贪婪匹配,尽量少匹配
re.compile('.*', re.DOTALL) #匹配所有,包括有换行等等
re.compile(r'robocop', re.I) #不区分大小写匹配
name.sub(字符,字符) #前一个是替换后的,后一个是要匹配替换的字符串
name.sub(r'\1****', 'Agentasdasd') #将第一组替换为* \2第二组
re.compile(r'''asda
asdasd
asdad''', re.VERBOSE) #多行正则,可写注释
re.compile('foo', re.IGNORECASE | re.DOTALL) #多参数调用

二.规则

file

file

三.具体例子

#匹配电话号码
phoneRegex = re.compile(r'''(
    (\d{3}|\(\d{3}\))?  #3个数字或括号中的3个数字
    (\s|-|\.)?  #空白或-或.
    (\d{3}) #3个数字
    (\s|-|\.)  #空白或-或.
    (\d{4})  #4个数字
    (\s*(ext|x|ext.)\s*(\d{2,5}))? #任意数量空白+可选ext+任意数量空白+2-5个数字
    )''', re.VERBOSE)
#匹配邮件地址
emailRegex = re.compile(r'''(
    [a-zA-Z0-9._%+-]+ #一个或多个字符,字母数字下划线,百分号,加好,短横,句号
    @   #@符
    [a-zA-Z0-9.-]+ #同上匹配
    (\.[a-zA-Z]{2,4}) #.com这种域名部分,重复2-4个
    )''', re.VERBOSE)
from collections import namedtuple
Duck = namedtuple('Duck', 'bill tail')
duck = Duck('wide irange', 'log')
duck
duck.bill

parts = {'bill': 'wide orange', 'tail': 'long'} #字典构造命名元祖
duck2 = Duck(**parts)

duck3 = duck2._replace(tail='magnificent', bill='crushing') #替换部分值,返回新的



search() 会返回第一次成功匹配,如果存在的话
m = re.search('Frank', 'Young Frankenstein')

findall() 会返回所有不重叠的匹配的列表,如果存在的话
m = re.findall('n', 'Young Frankenstein')

split() 会根据 pattern 将 source 切分成若干段,返回由这些片段组成的列表;
m = re.split('n', source) #以n分隔,将其它字符放到数组

sub() 还需一个额外的参数 replacement,它会把 source 中所有匹配的 pattern 改成replacement。
m = re.sub('n', '?', source) #返回字符串,将匹配到的n换成问号


#字符串常量
import string
printable = string.printable
print(printable)

re.findall('\d', printable) #找出数字
re.findall('\w', printable) #数字,字符,下划线
re.findall('\s', printable) #哪些是空格
re.findall('[wf]ish', source) #w或f开头
re.findall('[wsh]+', source) #若干个w、s、h的组合
re.findall('I (?=wish)', source) #I开头,后面跟wish,出现次数尽量少
re.findall('(?<=I) wish', source) #查询以wish结尾,前面为I的匹配(I出现的次数尽量少)

标签:Bat,匹配,re,Python,compile,正则表达式,wo,findall
来源: https://www.cnblogs.com/rxysg/p/15689187.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有