YOLO813

python中正则表达式的学习

    先抛出概念,正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。具体的概念可以自行谷歌,但是有一点需要说明的是,几乎所有语言中都可以使用正则表达式来做一些便利性查找或者替换,无论是前端的JS,还是后端的Java、python等(请注意,正则表达式并非专属某项语言),所以学习代码正则表达式几乎是绕不过去的一段坎。

    今天的学习是尝试利用python的re模块和正则表达式中的一些基本内容来匹配手机号,其中关于正则表达式会用到以下内容:

  • \d:匹配一个数字字符,等同于 [0-9],如果是\d+,则匹配所有的数字,可以理解为无穷个\d\d\d.....
  • +:加号在正则表达式有特殊含义,等同于匹配前面的子表达式一次或多次,所以如果想要匹配到加号,需要使用反斜杠,即"\",来进行转义(专业名词,背就行了),所以如果你想在正则表达式中匹配反斜杠,需要使用"\\",同理,你想匹配加号,那么就需要使用"\+"。
  • 关于re模块,今天我们主要使用的是re.compile(),它接受一个字符串参数,将返回一个Regex对象(可以理解为下面的匹配规则),我们在命令行中打开python,输入代码如下:
>>>import re
# 我们预写的匹配规则,\+匹配加号,\d+匹配数字,-非特殊字符即匹配杠
>>>phone_regex = re.compile(r"\+\d+-\d+") 
# 文本值
>>>my_text = "This is test number regex: +852-13841957986"
# 调用匹配规则.search()方法
>>>match_test = phone_regex.search(my_text)
# 利用group()取值
>>>match_test.group()
'+852-13841957986'

 

    可以看到我将my_text 文本中的电话号码成功的取了出来,但是在正则匹配规则前面我加了一个"r"字母 r"\+\d+-\d+",这个表示原生字符串,我们知道反斜杠\在python 当中具有转义的作用,而我们需要输入\\d才能表示\d(第一个反斜杠转义第二个反斜杠,获得一个反斜杠,然后\d才是我们真正需要的正则表达式元字符),即如果我不适用r原生字符串标识,那么表示这串匹配规则就需要改成下方代码所示:

>>>phone_regex = re.compile("\\+\\d+-\\d+") 

当然这只是举了一个简单的例子,正则表达式能做的远比这个多得多,后续再继续学习。

 

参考

正则表达式测试网站:https://www.regexpal.com