首页 > 代码库 > 常用正则表达式
常用正则表达式
正则表达式设计之初就是为了匹配任何特征的字符串,所以也就有了无数种可能的模式。但毕竟不是每一种我们
都会用到,总有一些正则表达式是比较常用的,并且占了应用的80%,下面我们就来总结一下这些常用的正则表达式
,以备不时之需。代码示例使用python,我会加入一些需要注意的地方的说明
1.匹配中文
uincode编码中中文的编码范围为 4e00-9fa5,正则表达式可据此来定义
# 目标字符串 注意转换为 Unicode 编码 _string = u"大家好,欢迎来到python正则表达式教程" # 正则表达式也要用 Unicode words = re.findall(u"[\u4e00-\u9f5a]+", _string) for word in words: print word # 输出 ‘‘‘ 大家好 欢迎来到 正则表达式教程 ‘‘‘
2.匹配空行
这个一般用来去除文件中的空行,空行分3种,首行,末行,中间行,代码示例将使用正则去除这三种空行
# 目标字符串 _string = """ 大家好 欢迎来到 正则表达式教程 """ # 定义一个匹配换行符的正则表达式 # 先匹配 \r\n 再匹配 \n line_reg = ‘[(?:\r\n)|\n]‘ # 首行空行匹配正则 需替换为 ‘‘ first_line_reg = ‘^‘ + line_reg # 末行空行匹配正则 需替换为 ‘‘ last_line_reg = line_reg + ‘$‘ # 匹配中间行 # 两个换行之间为空白字符 需替换为换行 以 unix 换行 \n 为例 # [(?:\r\n)|\n]\s*[(?:\r\n)|\n] other_line_reg = line_reg + ‘\s*‘ + line_reg # 开始替换 #_string = re.sub(first_line_reg, ‘‘, _string) #_string = re.sub(last_line_reg, ‘‘, _string) #_string = re.sub(other_line_reg, ‘\n‘, _string) # 最简单的方式 利用字符串的strip方法去除首尾空白字符 然后去掉中间空行_string = re.sub(other_line_reg, ‘\n‘, _string.strip()) print _string # 输出 ‘‘‘ 大家好 欢迎来到 正则表达式教程 ‘‘‘
3.匹配HTML标签
利用HTML标签的特征,以<>包括
# 目标字符串 _string = """<div id="cnblogs_post_body">
<p style="margin-left: 30px">正则表达式设计之初就是为了匹配任何特征的字符串,所以也就有了无数种可能的模式。但毕竟不是每一种我们</p> <p style="margin-left: 30px">,以备不时之需。代码示例使用python,我会加入一些需要注意的地方的说明 </p>
</div>""" # 匹配标签整体 print re.findall(‘<[^>]+/?>‘, _string) # 输出 ‘‘‘ [‘<div id="cnblogs_post_body">‘, ‘<p style="margin-left: 30px">‘, ‘</p>‘, ‘<p style="margin-left: 30px">‘, ‘</p>‘, ‘</div>‘] ‘‘‘
4.中国身份证号码18位
# 目标字符串 _string = ‘371311199501011081‘ # _string = ‘37131119950151108x‘ # 身份证号特征 # 前六位行政区划分代码 纯数字 不以0开头 # 中间8位出生年月日 暂定为2100年之前 # 15-17位为顺序码 纯数字 # 18位为校验码 数字+x print re.findall(‘[1-9]\d{5}[1-2]\d{4}[0-2][0-3]\d{4}[\d|x|X]‘, _string) # 输出 ‘‘‘ [‘371311199501011081‘]
5.邮箱
# 目标字符串 _string = ‘myemail.qq@qq.com‘ # 不同的邮箱的限制规则略微有区别 这里就写一个比较通用的 print re.findall(‘^[\w\.]{3,}@[a-zA-Z0-9]+\.[a-z]{2,4}$‘, _string) # 输出 ‘‘‘ [‘myemail.qq@qq.com‘] ‘‘‘
6.手机号码和电话号码
# 目标字符串 _string = ‘‘‘+8613743451234 13578921356 0371-8562889 010-52722222 ‘‘‘ # 特殊的号码,例如 110、10086、95119等这些号码最好还是使用穷举法来匹配# 一般手机号 包含+86 print re.findall(‘(?:\+86)?1\d{10}‘, _string) # 一般固话号码 print re.findall(‘(?:\d{3}-\d{8}|\d{4}-\d{7})‘, _string) # 输出 ‘‘‘ [‘+8613743451234‘, ‘13578921356‘] [‘0371-8562889‘, ‘010-52722366‘] ‘‘‘
7.URL
# 目标字符串 _string = ‘‘‘ https://www.ail.org:800/doku.php?id=Main?DASF https://www.youtube.com/watch?v=QmTxf http://fanyi.baidu.com/#auto/zh/ http://www.ehaoyao.com/product-37753.html?baidu ‘‘‘ # url格式 包含 http https ftp file 以及其他 # [a-zA-Z]+:\/\/ # 域名格式 包含 xxx.xxx.com 192.168.1.1等 # (?:[-\w]+\.)+[\w]+\/? # 路径以及参数 /a/b.html?a=1&b=2#123 # [-\/\w\?#&=\.]+ print re.findall(‘[a-zA-Z]+://(?:[-\w]+\.)+\w+(?::\d+)?/?(?:[-/\w\.]*)?\??(?:[-\w+\.#&=/]*)?‘, _string) # 输出 ‘‘‘ [‘https://www.ail.org:800/doku.php?id=Main‘, ‘https://www.youtube.com/watch?v=QmTxf‘, ‘http://fanyi.baidu.com/#auto/zh/‘, ‘http://www.ehaoyao.com/product-37753.html?baidu‘] ‘‘‘
8.IP地址
# 目标字符串 _string = ‘‘‘ 192.168.11.11 ‘‘‘ # 0-255 分为4段 # 3位数 # 2开头 1开头 # 2[0-5]\d # 1\d{2} # 2位数 # [1-9]\d # 1位数 # \d # 一段数字 # (?:2[0-5]\d|1\d{2}|[1-9]\d|\d) # 加 . # (?:(?:2[0-5]\d|1\d{2}|[1-9]\d|\d)\.) # 全 # (?:(?:2[0-5]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:2[0-5]\d|1\d{2}|[1-9]\d|\d) print re.findall(‘(?:(?:2[0-5]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:2[0-5]\d|1\d{2}|[1-9]\d|\d)‘, _string)[0] # 输出 ‘‘‘ 192.168.11.11 ‘‘‘
9.日期格式
日期格式太多了,这里仅写一下常见的格式
# 目标字符串 _string = u‘‘‘ 2016/11/21 15:39:21 2016-11-21 15:39:21 2016年11月21日 15:39:21 ‘‘‘ print re.findall(u‘\d{4}[-/\u4e00-\u9f5a]\d{2}[-/\u4e00-\u9f5a]\d{2}[-/\u4e00-\u9f5a]?\s+\d+:\d+:\d+‘, _string) # 输出 ‘‘‘ [u‘2016/11/21 15:39:21‘, u‘2016-11-21 15:39:21‘, u‘2016\u5e7411\u670821\u65e5 15:39:21‘] ‘‘‘
10.密码强度限制
# 目标字符串 _string = ‘‘‘ daf3147vmfkADSF‘‘‘ # 匹配思路 # 存在一个位置 后面任意个字符存在数字 小写字母 大写字母 # 长度限制 print re.findall(‘(?=.*?\d)(?=.*?[a-z])(?=.*?[A-Z]).{8,16}‘, _string) # 输出 ‘‘‘ [‘daf3147vmfkADSF‘] ‘‘‘
11.金额
# 目标字符串 _string = ‘‘‘ 999.01 99,999,999.01 ‘‘‘ # print re.findall(‘\d{1,3}(?:,\d{3})*(?:\.\d+)?‘, _string) # 输出 ‘‘‘ [‘999.01‘, ‘99,999,999.01‘] ‘‘‘
12.从网页中提取图片链接和超链接
# 目标字符串 _string = ‘‘‘ <li><a id="blog_nav_rss" href="http://www.cnblogs.com/dyfblog/rss">订阅</a><a id="blog_nav_rss_image" href="http://www.cnblogs.com/dyfblog/rss"><img src="http://www.cnblogs.com/images/xml.gif" alt="订阅" /></a> <li><a id="blog_nav_admin" rel="nofollow" href="https://i.cnblogs.com/">管理</a></li> </ul> ‘‘‘ # print re.findall(‘<img[^>]*?src=http://www.mamicode.com/[/‘/"]([^\‘\"]+)‘, _string) print re.findall(‘<a[^>]*?href=http://www.mamicode.com/[/‘/"]([^\‘\"]+)‘, _string) # 输出 ‘‘‘ [‘//www.cnblogs.com/images/xml.gif‘] [‘http://www.cnblogs.com/dyfblog/rss‘, ‘http://www.cnblogs.com/dyfblog/rss‘, ‘https://i.cnblogs.com/‘] ‘‘‘
常用正则表达式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。