人生苦短,快学Python!
前几天看到一篇文章,链接如下:
文章中,只是简单罗列出了re正则表达式
中,常用的匹配符号,但是并没有详细举例说明。
很多朋友可能只是看着有感觉,但是仍然不会用。今天这篇文章,我将会为大家举例讲解正则表达式
中常用的匹配符号。一个符号、一个案例,学起来超方便哦!
好了,废话不多说,咱们直接开干。
首先介绍的是7个 普通元字符,详细介绍如下图,它们在正则表达式中,都有着自己特殊的含义。
案例如下:
import re
str1 = "acb azb abb a6b aab"
result1 = re.findall("a[a-z]b",str1) ①
result2 = re.findall("a[0-9]b",str1) ②
result3 = re.findall("a[za6]b",str1) ③
print(result1)
print(result2)
print(result3)
结果如下:
代码解释:不管是①②③,表示匹配开头是a,末尾是b。唯一不同的就是[ ]符号中匹配值不同。
案例如下:
import re
str2 = "我是孙悟空,您可以称呼我为齐天大圣!"
result1 = re.findall("孙悟空|齐天大圣",str2)
print(result1)
结果如下:
代码解释:要么匹配孙悟空,要么匹配齐天大圣。
案例如下:
import re
str3 = "\n123456" ①
str4 = "\\n123456" ②
str5 = r"\n123456" ③
result3 = re.findall("n",str3)
result4 = re.findall("n",str4)
result5 = re.findall("n",str5)
print(result3)
print(result4)
print(result5)
结果如下:
代码解释:观察①②③处的区别,我们分别注意\的个数和r的用法。
案例如下:
import re
str6 = "你来自哪里?我来自湖北省"
result7 = re.findall("^你",str6)
result8 = re.findall("^来",str6)
result9 = re.findall("省$",str6)
result10 = re.findall("湖北$",str6)
print(result7)
print(result8)
print(result9)
print(result10)
结果如下:
代码解释:一个用于匹配开头,一个用于匹配结尾。只有开头或结尾,与你要匹配的值一致,才能被匹配到。
案例如下:
import re
str6 = "abcdaabb"
result10 = re.findall("a.b",str7) ①
result11 = re.findall("a*b",str7) ②
result12 = re.findall("a?b",str7) ③
result13 = re.findall("a.*b",str7) ④
result14 = re.findall("a.*?b",str7) ⑤
print(result10)
print(result11)
print(result12)
print(result13)
print(result14)
结果如下:
代码解释:点号一般与*号和?号搭配使用。仔细观察①-⑤处的正则表达式,开头和结尾都是a、b,唯一不同的就是它们之间的符号。
案例如下:
import re
str8 = "a321b木头人c"
result15 = re.findall("a(\d+)b([\u4e00-\u9fa5]+)c",str8)
print(result15)
结果如下:
代码解释:()表示一个组,只要是()中的内容,最后都会被返回。
接着介绍的是6个常用字母,它们与转义符号搭配,有着自己独特的含义;
案例如下:
import re
str1 = "123\n黄同学@#%嘻嘻\t"
result1 = re.findall("\d",str1)
result2 = re.findall("\D",str1)
print(result1)
print(result2)
结果如下:
代码解释:\d仅匹配数字,\D用于匹配非数字,很好理解。
案例如下:
import re
str2 = "\r123\n黄同学@#%嘻嘻\t"
result3 = re.findall("\s",str2)
result4 = re.findall("\S",str2)
print(result3)
print(result4)
结果如下:
代码解释:\s仅匹配空白字符,\S用于匹配非空白字符(这个更常用)。
案例如下:
import re
str3 = "\r123\n黄同学_@#%嘻嘻\t"
result5 = re.findall("\w",str3)
result6 = re.findall("\W",str3)
print(result5)
print(result6)
结果如下:
代码解释:\w相当于[A-Za-Z0-9_],超好用(值得注意),\W匹配非单词字符,了解即可。