正则表达式

正则表达式

正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语: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']

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容