时间:2021-05-22
正则表达式
正则表达用来匹配字符串
正则表达式匹配过程
正则表达式语法规则
abe
ace
ade
ab
abc
abccc
+ 匹配一个字符串1次或无限次 abc+abc
abccc
? 匹配一个字符串0次或1次abc?
ab
abc
{m} 匹配一个字符串m次 abc{2} abcc {m,n} 匹配一个字符串m到n次 abc{2,3}abcc
abccc
abc
def
(...) 作为分组,每遇到一个(,分组编号加1,使用分组的好处是匹配的子串会保存到一个子组,便于以后使用 (abc){2} abcabc (?P<name>...) 分组除原有编号外,再加一个别名 (?P<id>abc){2} abcabc \<number> 引用编号为number的分组匹配到的字符串 (\d)ab\11ab1
5ab5
(?P=name) 应用别名为name的分组匹配到的字符串 (?P<id>abc)ee(?P=name) abceeabc前面是数字的a
(?<!...) 之前的字符串表达式需要不匹配才能成功,不消耗字符串内容 (?<!\d)a 前面不是数字的a(?(id/name)yes_
pattern|no_parttern)
如果匹配到分组为id或别名name的字符串成功匹配,则需要匹配yes_pattern
不成功,怎需要匹配no_pattern
(\d)abc(?(1)\d|def)1abc3
abcdef
贪婪模式和非贪婪模式
贪婪模式是尽可能多的匹配字符串,python默认为贪婪模式,非贪婪模式尽可能少的匹配字符串,在正则表达式后面加个?表示非贪婪模式。例如:字符串abcccb,贪婪模式正则表达式为ab.*c,非贪婪模式的正则表达式为ab.*?c,贪婪模式结果为abccc,非贪婪模式结果为abc,再比如字符串abbb,贪婪模式正则表达式为ab?,非贪婪模式正则表达为ab??,贪婪模式结果为ab,非贪婪结果为a。
python的re模块
re模块的方法:
1.compile(pattern[,flag]):对正则表达式pattern进行编译,编译后比直接查找速度快
2.match(patter,string[,flag]):从字符串string的开始就匹配,若匹配成功,则返回匹配对象,否则返回None(None对象没有group()和groups()方法,不判断直接调用这两个方法,则会出现异常)
3.search(pattern,string[,flag]):从字符串中查找,若匹配成功,则返回匹配对象,否则返回None
4.findall(pattern,string[,flag]):在字符串 string 中查找正则表达式模式 pattern 的所有(非重复)出现;返回一个匹配对象的列表
5.finditer(pattern,string[, flags])b 和 findall()相同,但返回的不是列表而是迭代器;对于每个匹配,该迭代器返回一个匹配对象
6.split(pattern,string, max=0) 根据正则表达式 pattern 中的分隔符把字符 string 分割为一个列表,返回成功匹配的列表,最多分割 max 次(默认是分割所有匹配的地方)
7.sub(pattern, repl, string, max=0) 把字符串 string 中所有匹配正则表达式 pattern 的地方替换成字符串 repl,如果 max 的值没有给出, 则对所有匹配的地方进行替换
匹配对象的方法和属性:
参数flag:
re.I 使匹配对大小写不敏感 re.L 做本地化识别(locale-aware)匹配 re.M 多行匹配,影响 ^ 和 $ re.S 使 . 匹配包括换行在内的所有字符 re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B. re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。
python使用正则表达式的例子
>>> import re>>> pattern = re.compile(r'foo')>>> res1 = re.search(pattern,'foo')>>> res1.group() # 返回的是匹配对象,需要调用group()方法,显示所有的匹配对象'foo'>>> res1.groups()# 因为没有子组(即正则表达式中没有分组),返回空元组()>>> res2 = re.findall(pattern,'foobbfoo')>>> res2 # 直接返回的是一个列表,包含所有匹配的字符['foo', 'foo']>>> pattern2 = re.compile(r'(\d+)aa')>>> res3 = re.search(pattern2,'bb32aa')>>> res3.group() # 返回所有的匹配的对象'32aa'>>> res3.groups() # 对比res1的groups(),正则里有分组,返回匹配到的分组('32',)>>> res4 = re.findall(pattern2,'bb32aacc5aacc')>>> res4 # 对比res2,返回一个列表,但只包含所匹配分组里面的字符,['32', '5']总结
以上所述是小编给大家介绍的python正则表达式及使用正则表达式的例子,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
感谢AKA及作者。Perl中的正则表达式正则表达式的三种形式正则表达式中的常用模式正则表达式的8大原则 正则表达式是Perl语言的一大特色,也是Perl程序中
python根据正则表达式提取指定的内容正则表达式是极其强大的,利用正则表达式来提取想要的内容是很方便的事。下面演示了在python里,通过正则表达式来提取符合
本文实例讲述了Python使用正则表达式过滤或替换HTML标签的方法。分享给大家供大家参考,具体如下:python正则表达式关键内容:python正则表达式转义
1、正则表达式包括两部分①定义正则表达式的规则;②正则表达式的模式(i/g/m);2、声明正则表达式①字面量声明:varreg=/表达式规则/表达式模式; e
JavaScript中的正则表达式解析正则表达式(regularexpression)对象包含一个正则表达式模式(pattern)。它具有用正则表达式模式去匹配