ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

正则表达式

2021-12-22 17:03:15  阅读:141  来源: 互联网

标签:匹配 正则表达式 pattern re print import match


python提供了内置模块re,和第三方模块regex来支持正则表达式
这次只介绍re模块

使用

基本语法:

.:匹配处理换行的任意字符
^:匹配字符串的开头
$:匹配字符串尾
字符:*,+,?:0到n,1到n,0到1
{m,n}:前一个字符m到n次
\:转义字符
[]:表示字符集合
():表达式分组?
|:标识逻辑或,左右任意一个表达式
\number:匹配数字代表的组合
\b:匹配空字符串,只在单词开始或结尾的位置
\B:匹配空字符串,除了单词开始或结尾的位置
\d:匹配数字【0-9】
\D:匹配任何非十进制数字字符
\s:匹配空白字符
\S:匹配非空白字符
\w:匹配【a-zA-Z0-9】
\W:匹配非单词字符
\Z:只匹配字符串尾

re模块内容:

主要方法:re.complie(pattern,flags=0)
用于编译正则表达式,生成一个正则表达式(pattern)对象,供match()和search()两个函数使用。
参数介绍:
pattern:字符串形式的正则表达式
flags:匹配模式,包括:
re.A:只匹配ASCⅡ码
re.I:忽略大小写
re.M:多行模式
re.L:由当前语言区域决定\w,\W,\b,\B和大小写敏感匹配
re.S:。匹配包括换行符在内的任意字符
re.U:冗余,python3中字符串默认是Unicode编码
re.X:忽略空格和#后面的注释

示例:

使用python3.9解释器,亲测有效。

import re

re.compile(r'asdf', re.I)

re.search(pattern,string,flags=0)
扫描整个字符串找到匹配样式的第一个位置,并返回一个相应的匹配对象。如果没有匹配,就返回None。
参数介绍:
pattern:匹配的正则表达式
stirng:要匹配的字符串
flags:匹配模式

import re

print(re.search(r'asdf','asdfqwer'))
print(re.search(r'asdf','aSdFqwer',re.I))

re.match(pattern,string,flags=0)
扫描整个字符串,找到匹配样式的第一个位置,并返回相应的匹配对象。如果没有匹配就返回None
参数介绍同上:
pattern:匹配的正则表达式
stirng:要匹配的字符串
flags:匹配模式
示例:

import re

print(re.match(r'asd','asdf'))

re.fullmatch(pattern,string,flags=0)
如果string开始的0或者多个字符完全匹配到了正则表达式样式,就返回一个相应的匹配对象。如果没有,就返回None
示例:

import re

print(re.fullmatch(r'asd', 'asdf'))
print(re.fullmatch(r'asd','asd'))

re.split(pattern,string,maxsplit=0,flags=0)
用pattern分开string,如果在pattern中捕获括号,那么所有的组里的pattern也会包含在列表中,如果maxsplit非零,最多进行maxsplit次分隔,剩下的字符全部返回到列表的最后一个元素。

import re

print(re.split(r'\W+', 'ityard,ityard,ityard.'))
print(re.split(r'(\W+)', 'ityard,ityard,ityard.'))
print(re.split(r'\W+', 'ityard,ityard,ityard.', 1))
print(re.split('[a-f]+','1A2b3',flags=re.IGNORECASE))

re.findall(pattern,string,flags=0)
对string返回一个不重复的pattern的匹配列表

import re

print(re.findall(r'ab','abefabdeab'))

re.finditer(pattern,string,flags=0)
返回为一个迭代器,从左到右扫描

import re

# it=re.finditer(r'\d+','12ab34cd56')
it=re.finditer(r'\d+','43aa43aa21aa')
for match in it:
    print(match)

re.sub(pattern,repl,string,count=0,flags=0)
返回通过使用repl替换在string最左边非重叠出现的pattern而得到的字符串,count表示匹配后出现的最大次数默认为0表示替换所有匹配。

import re

str='ityard # 不是我的名字'
print(re.sub(r'#.*$', '', str))

re.subn(pattern,repl,string,count=0,flags=0)
行为与re.sub()相同,返回的是一个元组

import re

str='alex # 是我的名字'
print(re.subn(r'#.*$', '', str))

re.excape(pattern)
转义它的特殊字符

import re

print(re.escape('https://blog.csdn.net/alex'))

re.purge()
清除正则表达式缓存

正则对象

正则对象的相应方法:

import re

pattern=re.compile(r'bc', re.I)
print(pattern.search('aBcdef'))
print(pattern.search('aBcdef',1,3))
print(pattern.match('aBcdef'))# None
print(pattern.match('aBcdef',1,3))
print(pattern.fullmatch('aBcdef',1,3))
print(pattern.split('abc,aBcd,abcde.'))# []
print(pattern.findall('abcdefabCdeABC'))# []
print(pattern.findall('abcdefabCdeABC',0,6))# []
it=pattern.finditer('12bc34BC56', 0, 6)
for match in it:
    print(match)
import re

pattern=re.compile(r'#.*$')
str='alex # 是我的名字'
print(pattern.sub('',str))
print(pattern.subn('',str))

匹配对象

Match.expand(template)
对template进行反斜杠转义替换并且返回

import re

match=re.match(r'(?P<year>\w+) (?P<month>\w+)', '2020 01')
print(match.expand(r'现在是\1年\2月'))

Match.group([group1,…])
返回一个或多个匹配的子组

import re

match=re.match(r'(?P<year>\w+) (?P<month>\w+)', '2021 12')
print(match.group(0))
print(match.group(1))
print(match.group(2))

Match.groups(default=None)
返回一个元组,包含所有匹配的子组,在样式中出现的从1到任意多的组合
default参数用于不参与匹配的组合,默认为None

import re

match=re.match(r'(?P<year>\w+) (?P<month>\w+)','2020 01')
print(match.groups())

Match.groupdict(default=None)
返回一个字典,包含所有的命名子组,default用于不参与匹配的组合,默认为None

import re

match=re.match('(?P<year>\w+) (?P<month>\w+)', '2020 02')
print(match.groupdict())

Match.start([group])和Match.end([group])
返回group匹配到的字符串的开始和结束标号

import re

match=re.match('(?P<year>\w+) (?P<month>\w+)', '2020 02')
print(match.start())
print(match.end())

Match.span([group])
对于一个匹配m,返回一个二元组(m.start(group),m.end(group))。

import re

match=re.match('(?P<year>\w+) (?P<month>\w+)', '2020 02')
print(match.span())

标签:匹配,正则表达式,pattern,re,print,import,match
来源: https://blog.csdn.net/weixin_47798423/article/details/122080448

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

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

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

ICode9版权所有