正则表达式
正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。
许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。
在python中实现正则,首先导入re模块。
匹配单个字符:
1"." 匹配除了换行符以外任意的字符
输入:print(re.findall(r".","12345\nqwer"))
输出:['1', '2', '3', '4', '5', 'q', 'w', 'e', 'r']
2.[] 字符集合,表示匹配包涵方括号中任意一个字符
输入:print(re.findall(r"[123]","12341256"))
输出:['1', '2', '3', '1', '2']
3.[0-9] 匹配数字
输入:print(re.findall(r"[0-9]","12a34\t125674$$@dffs890"))
输出:['1', '2', '3', '4', '1', '2', '5', '6', '7', '4', '8', '9', '0']
4.\d 匹配数字
输入:print(re.findall(r"\d","12a34\t125674$$@dffs890"))
输出:['1', '2', '3', '4', '1', '2', '5', '6', '7', '4', '8', '9', '0']
5.[^0-9] 匹配非数字^ 写[]中我们称之为脱字节
输入:print(re.findall(r"[^0-9]","21324r\nxc\rvbnmrtyu45678"))
输出:['r', '\n', 'x', 'c', '\r', 'v', 'b', 'n', 'm', 'r', 't', 'y', 'u']
6.\D 功能同[^0-9]
7.[a-z] 匹配小写字母
输入:print(re.findall(r"[a-z]","12a34\t125674$$@dffs890"))
输出:['a', 'd', 'f', 'f', 's']
8.[A-Z] 匹配大写字母
输入:print(re.findall(r"[A-Z]","12a34\t125AWERE674$$@dffs890"))
输出:['A', 'W', 'E', 'R', 'E']
9.[a-zA-Z0-9_] 匹配字母数字下划线
输入:print(re.findall(r"[0-9a-zA-Z_]","1-2a34\t125AW674$$@d90"))
输出:['1', '2', 'a', '3', '4', '1', '2', '5', 'A', 'W', '6', '7', '4', 'd', '9', '0']
10.\w 匹配字母数字下划线
输入:print(re.findall(r"\w","1-2a34\t125674$$@d890"))
输出:['1', '2', 'a', '3', '4', '1', '2', '5', '6', '7', '4', 'd', '8', '9', '0']
11.[^a-zA-Z0-9_] 匹配非字母数字下划线
输入:print(re.findall(r"[^0-9a-zA-Z_]","21324r\nxc\rvbnmrtyu45678"))
输出:['\n', '\r']
12.\W 功能同[^a-zA-Z0-9_]
13\s 匹配空白符 效果同[ \r\n\t\f]
14.\S 匹配非空白符 效果同[^ \r\n\t\f]
^ 行首匹配
$ 行尾匹配
15.\A 匹配字符串的开始,与^区别即使在re.M的模式下,也不匹配其他行的行首
输入:# print(re.findall(r"^12$","345\n12341234"))
输出:['123']
16.\Z 匹配字符串的结束,与$区别即使在re.M的模式下,也不匹配其他行的行首
输入:print(re.findall(r"12\Z","12455\n12",flags=re.M))
输出:['12']
17.\b 匹配一个单词的边界, 写左边匹配左边界,写在右边匹配右边界,
写在两边匹配整个单词
输入:print(re.findall(r"er\b","erner erver"))
输出:['er', 'er']
\B 匹配非单词的边界,写左边左边界不匹配,写在右边右边界不匹配,
写在两边,两边的边界不匹配。
输入:print(re.findall(r"er\B","erner erver"))
输出:['er', 'er']
17.(xyz) 作为一个整体来进行匹配
输入:print(re.findall(r"123","12354123"))
输出:['123', '123']
18.x?匹配0个或者一个x
输入:print(re.findall(r"1?","123554"))
输出:['1', '', '', '', '', '', '']
19.x* 匹配0个或者多个[贪婪匹配]
输入:print(re.findall(r".*","ddfdfasdfabddddddcfghjkabc"))
输出:['ddfdfasdfabddddddcfghjkabc', '']
20.x+ 匹配1个或者多个[贪婪匹配]
输入:print(re.findall(r"d+","ddfdfasdfabcfghjkabc"))
输出:['dd', 'd', 'd']
21.x{n} 匹配指定的n个x
输入:print(re.findall(r"[a-z]{5}","ddfdfasdfabcfghjkdasdaabcd"))
输出:['ddfdf', 'asdfa', 'bcfgh', 'jkdas', 'daabc']
22.x{n,}匹配至少的n个x[贪婪匹配]
输入:print(re.findall(r"[a-z]{5,}","ddfdfasdfabcfghjkabc"))
输出:['ddfdf', 'asdfa', 'bcfgh', 'jkdas', 'daabc']
23.x|y |表示匹配x或y
输入:print(re.findall(r"12|34","12233434467123456"))
输出:['12', '34', '34', '12', '34']