项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步
有一段时间没写正则表达式,略有点生疏,赶紧写两个练练手
#!/usr/bin/env python
#coding:utf-8
import re
#匹配电话号码
def match_phone_num():
phone_num = re.compile("0\d{2}-\d{8}|0\d{3}-\d{7}")
search = phone_num.search("010-123456789")
if search:
print search.group()
#匹配ip
def match_ip():
ip = re.compile("((?P<ThreeNum>2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)")
search = ip.search("192.168.123.125aaa")
if search:
print search.group()
注意给捕获组命名的写法
电话号码的这个表达式能匹配两种以连字号分隔的电话号码:一种三位区号,8位本地号(如010-68943652),一种4位区号,7位本地号(0376-2980456)
ip的正则匹配表达式稍作分析能明白,不再细述
选取靓号 数字全部相同的号码(AAAAAA)
(\d)\1{6,}
首先会获取第一位为0-9的数字,然后\1引用第一组里面内容然后重复6次或者6次以上.
匹配from 后面的一个单词(后向界定)
注意在python和Perl中两个反向界定的表达式exp只允许使用定长文本,如果写成如下的正则表达式,会报错
pattern = re.compile(r"(?<=from\s+)\b\w+\b",re.I)
sre_constants.error: look-behind requires fixed-width pattern
允许的写法:
pattern = re.compile(r"(?<=from )\b\w+\b",re.I)
此时反向界定的表达式就是定长的
匹配 from前面的一个单词(前向界定)
前向界定的表达式exp中就允许非定长文本
pattern = re.compile(r"\b\w+\b(?=\s+from)",re.I)