1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| import re
print("---------匹配单个字符与数字-----------") r''' . 匹配除换行符以外的任意字符 [0-9] []是字符集合,表示匹配方括号中所包含的任意一个字符 [yichen] 匹配'y','i','c','h','e','n'中的任意一个字符 [a-z] 匹配任意一个小写字母 [A-Z] 匹配任意一个大写字母 [0-9a-zA-Z] 匹配任意一个的数字和字母 [0-9a-zA-Z_] 匹配任意一个的数字、字母和下划线 [^yichen] 匹配除了yichen这几个字母以外的所有字符,中括号里的^称为托字符,表示不匹配集合中的字符 [^0-9] 匹配所有的非数字字符 \d 匹配所有的数字,效果同[0-9] [^\d] 匹配所有的非数字字符,效果同[^0-9] \D 匹配非数字字符,效果同[^0-9] \w 匹配数字,字母和下划线,效果同[0-9a-zA-Z_] \W 匹配非数字,字母和下划线,效果同 [^0-9a-zA-Z_] \s 匹配任意的空白符(空格,换行, 回车,换页,制表) 效果同[ \f\n\r\t] \S 匹配任意的非空白符,效果同[^ \f\n\r\t]
''' print(re.search(".", "yichen is a good man ")) print(re.search("[0-9]", "yichen is a good man 6 ")) print(re.search("[yichen]", "yichen is a good man 6 ")) print(re.findall("[^yichen]", "yichen is a good man 6 ")) print(re.findall("[^\d]", "yichen is a good man 6 ")) print(re.findall("\D", "yichen is a good man 6 ")) print(re.findall("\w", "_yichen is a good man 6 "))
print("---------锚字符(边界字符)----------")
r''' ^ 行首匹配,和在[]里的^不是一个意思 $ 行尾匹配 \A 匹配字符串开始,他和^的区别是,\A只匹配整个字符串的开头,即时在re.M模式下也不会匹配它行的行首 \Z 匹配字符串结束,他和$的区别是,\Z只匹配整个字符串的结束,即时在re.M模式下也不会匹配它行的行尾
\b 匹配一个单词的边界,也就是值单词和空格间的位置 'er\b'可以匹配never,不能匹配nerverr \B 匹配非单词的边界, ''' print(re.findall("yichen$", "yichen is a good man")) print(re.findall("^yichen", "yichen is a good man\nyichen is a good man",re.M)) print(re.findall("\Ayichen", "yichen is a good man\nyichen is a good man",re.M))
print(re.findall("man$", "yichen is a good man\nyichen is a good man",re.M)) print(re.findall("man\Z", "yichen is a good man\nyichen is a good man",re.M))
#\b print(re.findall(r"er\b", "never")) print(re.findall(r"er\b", "neverr")) print(re.findall(r"\ber", "ernever"))
#\B print("-----\B------") print(re.findall(r"er\B", "neverr")) print(re.findall("\Ber", "erneverr"))
print("----------匹配多个字符-----------")
''' 说明: 下方的x、y、z均为假设的普通字符,n、m为负整数,不是正则表达式的元字符 (xyz) 匹配小括号内的xyz(作为一个整体去匹配) x? 匹配0个或者1一个x x* 匹配0个或者任意多个x (.*表示匹配0个或者任意多个字符(换行符除外)) x+ 匹配至少一个x x{n} 匹配确定的n个x(n是一个非负整数) x{n,} 匹配至少n个x x{n,m} 匹配至少n个最多m个x 。注意:n <= m x|y |表示或,匹配的是x或y
''' print(re.findall(r"(yichen)", "yichengood yi a good man ,yichen is a nice man")) print(re.findall(r"a?", "aaaaaaba")) #非贪婪匹配(尽可能的少匹配) print(re.findall(r"a*","aaaaaba")) #贪婪匹配(尽可能的多匹配) print(re.findall(r"a+","aaaaaba")) #贪婪匹配(尽可能的多匹配) print(re.findall(r"a{3}","aaaaabaaaaaaa")) print(re.findall(r"a{3,}","aaaaabaaaaaaa")) print(re.findall(r"a{3,6}","aaaaabaaaaaaa")) print(re.findall(r"((y|Y)ichen)","yichen--Yichen"))
#需求,提取yichen******man, str = "yichen is a good man! yichen is a nice man! yihen is a very handsome man" print(re.findall(r"^yichen.*man$", str))
print("------------特殊--------------")
''' *? +? x? 最少匹配 通常都是尽可能的多的匹配,可以使用这种解决贪婪匹配 ''' print(re.findall(r"^yichen.*?man$", str)) #注释: /* part1 */ /* part2 */ print(re.findall(r"/\*.*\*/", r"/* part1 */ /* part2 */ "))
print(re.findall(r"/\*.*?\*/", r"/* part1 */ /* part2 */ "))
|