python 正则表达式

正则规则

[]:指定一个字符集,’[abc\s\d]’中,a,b,c任意一个满足便可以。
{}:重复,a{8}=aaaaaaaa;b{1,3}:重复1-3次。
^:匹配行首,’[^abc]’中,除了a,b,c,其他的都可以;’^hello’表示行首是hello的字符串。
$:匹配行尾,’boy$’表示行尾是boy的字符串。
\:转义字符
\d:[0-9]
\w:[a-zA-Z0-9_]
\s:空格或者tab或者换行,也包括\r\n
:指定前一个字符匹配0次或多次。’ab‘,可以匹配a,ab,abb,abbbb等。
+:指定前一个字符匹配1次或多次。
?:指定前一个字符匹配0次或1次,加载重复后面可以最小匹配。
.:表示任意字符(换行符\n除外re.DOTALL可以匹配所有字符串,包括换行;re.compile(r”.“,re.DOTALL)
(?i):在正则表达式前面加上这个,便可以忽略大小写;如:res=r”(?i)[abc]”
(asp|php|jsp):表示或者,跟[abc]的区别在于它是匹配一个字符串,而[]只是单个字符。
r’((?[\d]
){2,3})’:在内括号前加上?:,结果只匹配外面括号的内容。
Python中使用正则

我们知道正则并不是python特有的,很多编程语言都有正则。而在Python中想要使用正则,需要借助re模块。

# 导入模块
import re
res=r”[\d]{2}” #正则表达式
content=”abcd12345678abcd” #待匹配的内容

直接匹配

a=re.search(res,content)
if a:
print a.group()

编译 (加快匹配速度)

p_tel=re.compile(res) 将正则表达式编译,提高运行速度。
p_tel.findall(content) 找到RE匹配的所有子串,并作为列表返回。
p_tel.match(content) 决定RE是否在字符串刚开始的位置匹配。
p_tel.search(content) 扫描字符串,找到这个RE匹配的位置。
p_tel.group(num=0) 返回全部匹配对象。(或指定编号是num的子组)
p_tel.sub(pattern,string) 对正则表达式中所有匹配string的用pattern替换。
p_tel.split(pattern,string) 根据正则表达式pattern中的分隔符把字符string分隔为一个列表。
贪婪模式
需要特别指出的是,正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符。
例子:

>>> re.match(r’^(\d+)(0)$’, ‘123400’).groups() (‘123400’, ‘’) 说明:由于\d+采用贪婪匹配,直接把后面的0全部匹配了,结果0只能匹配空字符串了。必须让\d+采用非贪婪匹配(也就是尽可能少匹配),才能把后面的0匹配出来,加个?就可以让\d+采用非贪婪匹配:

>>> re.match(r’^(\d+?)(0)$’, ‘123400’).groups()
(‘1234’, ‘00’)
正则实例
匹配IP地址的正则表达式 res=/(\d+).(\d+).(\d+).(\d+)/g
匹配空行的正则表达式:res=\n[\s| ]
\r
匹配HTML标记的正则表达式:res=/<(.)>.<\/\1>|<(.) \/>/
匹配首尾空格的正则表达式:res=(^\s
)|(\s*$)
匹配中文字符的正则表达式: res=[\u4e00-\u9fa5] #python中需要转换为unicode
匹配双字节字符(包括汉字在内):res=[^\x00-\xff]
user_phone=r”((?:13[0-9]|14[579]|15[0-3,5-9]|17[0135678]|18[0-9])\d{8})”
user_name=r””+u”([\u4e00-\u9fa5\·]{2,3})”
user_id_18=r”([1-9]\d{5}(?:1[9,8]\d{2}|20[0,1]\d)(?:0[1-9]|1[0-2])(?:0[1-9]|1[0-9]|2[0-9]|3[0,1])\d{3}[\dxX])”
user_id_15=r”([1-9]\d{7}(?:0[1-9]|1[0-2])(?:0[1-9]|1[0-9]|2[0-9]|3[0,1])\d{2}[\dxX])”
car_id=r””+u”([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1})”
email=r”([a-z_0-9.-]{2,64}@[a-z0-9-]{2,200}.[a-z]{2,6})”
address=r””+u”([\u4e00-\u9fa5\·]{6,20})”
Python中针对 unicode正则写法:
res=ur”[\u4e00-\u9fa5]”

原文:https://thief.one/2017/10/30/1/