python中的re模块(正则表达式)
re模块是python中特有的,但是正则表达式是通用的。
正则表达式介绍
(1)特殊符号处理常用逻辑
符号 | 含义 | 正则表达式 | 可以匹配的例子 | 不可能匹配的例子 |
. | 匹配任一字符 | "a.c" | "abc",''amc" | "addc","addds" |
^ | 匹配以某个字符开始的字符串 | "^a" | "accc" | "vccc" |
$ | 匹配以某个字符结尾的字符串 | "a$" | "csada" | "ssum" |
[] | 匹配多个字符,可以将[]看作字典查找匹配 | "[abcd]" | "ab" |
"mn" |
[^...] | 匹配非字符组中的字符 | "[^abc]" | "ssds" | "abc" |
a|b | 匹配a或者b | "root|cat" | "root" | "big" |
() | 匹配括号内的表达式 | "(k|d)ing" | "ding" | "crying" |
重复型的匹配符号
符号 | 含义 | 正则表达式 | 可以匹配的例子 |
+ | 匹配一次或多次 | "(a|c)+d$" | "ad","caccd" |
* | 匹配零次或多次 | "(a|c)*d$" | "d","aaad" |
? | 匹配零次或一次 | "(a|c)?d$" | "ad","cd","d" |
{n} | 匹配确定的 n次(n为正整数) | "[0-9]{2}" | "21","26" |
{n,} | 至少匹配n次 | "[0-9]{3,}" | "001","003003" |
{n,m} | 最少匹配 n次且最多匹配 m 次 | "[0-9]{2,4}" | "23","231","6551" |
关于[]一些常用的匹配:
字符 | 含义 |
[0-9] | 匹配0-9这10个数字 |
[a-z] | 匹配a-z这26个小写字母 |
[A-Z] | 匹配A-Z这26个大写字母 |
[a-f0-7F-M] | 匹配a-f小写字母,匹配0-7数字,匹配F-M大写字母 |
转义字符 : \
在[]中有一些表达需要看作特殊符号,因此需要用到"\"。如果想要匹配某段文字中的一个"\",则需要4个反斜杠"\\\\"(在正则中需要4个)。解释:前两个反斜杠出来一个"\",后两个反斜杠也出来一个"\",这两个被送进正则表达中,由于"\"在正则中,有转义的作用,因此"\\"被翻译成一个普通的斜杠。
这时,可以利用原声字符串来解决这个问题,上面的这个可以写成 r"\\",即"\\"不转义直接送到正则表达式中,因此正则表达式读取后就是"\"。
在正则表达式中,转义字符加一些字母有一些特殊的意思,如下表所示。
字符 | 说明 | 正则表达式 | 可以匹配的例子 | 不可以匹配的例子 |
\d | 匹配一个数字 | "aca\d" | "aca2" | "acas" |
\s | 匹配任意空白符 | "a\sb" | "a b" (一个空格) | "abb" |
\t | 匹配一个制表符 | "\t" | ||
\n | 匹配一个换行符 | "\nA" | ||
\w | 匹配字母、数字、下划线 | "a\wc" | "a_c" | "a$c" |
\f | 匹配一个换页符 | |||
\b | 匹配一个单词边界 |
re模块常用函数
(1) re.match(regex, string, flags=0)
从字符串的起始位置匹配,匹配成功返回一个match对象,否则返回None
import re
regex = "a.c"
string = "abc"
print(re.match(regex,string))
output:
<_sre.SRE_Match object; span=(0, 3), match='abc'>
#含义:begin position:0 ;end position:3;match string is "abc"
(2) re.search(regex,string)
扫描整个字符串并返回第一个成功的匹配的,如果没有就返回None
import re
regex = r"\d.\\c"
string = "1A\c2\sc"
print(re.search(regex,string))
output:
<_sre.SRE_Match object; span=(0, 4), match='1A\\c'>
(3)re.sub(regex, repl, string, count=0, flags=0)
替换字符串中的匹配项, regex 正则中的模式字符串,repl替换的字符串
count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配
flags是一个标志位,不怎么用不写了。
import re
regex = r'#.*$'
string = "2004-959-559 # 这是一个国外电话号码"
print(re.sub(regex,"",string))
output:
2004-959-559
(4)re.compile(regex)
生成一个带有regex正则表达式的对象,供其他函数split,match,search使用。例子看(5)。
(5)re.split(regex, string,maxsplit)
按照能够匹配的子串将字符串分割后返回列表
import re
regex = "[a|b]+c"
pattern = re.compile("[a|b]+c")
string = "acbcbdcksnfcvscdbcacccbc"
print(re.split(regex,string,maxsplit=3)) #最大分隔3次
print(pattern.split(string))
output:
['', '', 'bdcksnfcvscd', 'acccbc']
['', '', 'bdcksnfcvscd', '', 'cc', '']
(6)re.findall(string,begin,end)
从字符串中找到匹配的所有子串,作为列表返回;如果没有找到匹配的,则返回空列表。
import re
pattern = re.compile("[a|b]+c")
string = "acbcbdcksnfcvscdbcacccbc"
print(pattern.findall(string))
print(pattern.findall(string,5,len(string)))
### 从5位置开始匹配直到结尾
output:
['ac', 'bc', 'bc', 'ac', 'bc']
['bc', 'ac', 'bc']
(7)re.finditer(string)
与re.findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。
import re
pattern = re.compile("[a|b]+c")
string = "acbcbdcksnfcvscdbcacccbc"
match = []
for i in pattern.finditer(string):
match.append(i.group(0))
print(match)
output:
['ac', 'bc', 'bc', 'ac', 'bc']
参考:
上一篇: 对已有字符串进行反转操作
推荐阅读
-
python中的re模块(正则表达式)
-
python 中的内置函数slice()
-
举例分析Python中设计模式之外观模式的运用
-
PHP中的正则表达式实例详解
-
EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
-
Python中的字典操作 博客分类: Python python字典操作javamap
-
剑指 Offer 53 - II. 0~n-1中缺失的数字 python
-
剑指offer:Python 整数中1出现的次数(从1到n整数中1出现的次数)图解 绝对让你看懂!
-
python--剑指offer--中等--43. 1~n整数中1出现的次数
-
单独编译Android 源代码中的模块实现方法