转载:https://blog.csdn.net/skyeyesxy/article/details/50837984
1.正则表达式的常用符号与方法
常用符号:点号,星号,问号与括号(小括号)
- (.):匹配任意字符,换行符\n除外
- (*):匹配前一个字符0次或无限次
- (?):匹配前一个字符0次或1次
- (.*):贪心算法
- (.*?):非贪心算法
- ( ):括号内的数据作为结果返回
常用方法:re.findall, re.search, re.sub
- findall:匹配所有符合规律的内容,返回包含结果的列表
- search:匹配并提取第一个规律的内容,返回一个正则表达式对象(object)
- sub:替换符合规律的内容,返回替换后的值
2.举例说明
1)findall
a.点号(.)
>>import re
a = ‘xz123‘
b = re.findall(‘x.‘, a)
print(b)
>>输出 [‘xz‘]
############点.
是一个占位符,一个.
代表一个符号
b.星号(*)
>>import re
a = ‘xyxy123‘
b = re.findall(‘x*‘, a)
print b
>>
- 输出
[‘x‘, ‘‘, ‘x‘, ‘‘, ‘‘, ‘‘, ‘‘, ‘‘]
############依次匹配字符,有则显示,无则显示‘‘
(空)。
c.问号(?)
>>import re
a = ‘xy123‘
b = re.findall(‘x?‘, a)
print b
- 单独与
*
一样,前面附加其他的符号将做非贪心限制
d.贪心(.*)
import re
secret_code = ‘ghkj08hs68xxIxxa14kgj4w314exxlovexxbvk14rgjhxxyouxxfj4286ykjhag2‘
b = re.findall(‘xx.*xx‘, secret_code)
print b
- 输出
[‘xxIxxa14kgj4w314exxlovexxbvk14rgjhxxyouxx‘]
只要满足条件全部显示,贪心算法
e.非贪心(.*?)
b = re.findall(‘xx.*?xx‘, secret_code)
- 输出
[‘xxIxx‘, ‘xxlovexx‘, ‘xxyouxx‘]
以上只做了解,一般只用(.*?)
f.经典用法(.*?)
b = re.findall(‘xx(.*?)xx‘, secret_code)
- 输出
[‘I‘, ‘love‘, ‘you‘]
()
包围所需要的内容,括号内的内容作为结果返回,不需要的内容放在括号外面
2)re.S
import re
secret_code = ‘‘‘ghkj08hs68xxIxxa14kgj4w314exxlove
xxbvk14rgjhxxyouxxfj4286ykjhag2‘‘‘
#love后有换行符
b = re.findall(‘xx(.*?)xx‘, secret_code)
print b
- 输出
[‘I‘, ‘bvk14rgjh‘]
,因为.
不能匹配换行符。所以会一行为一个搜索项去找。匹配任何字符除了新的一行
import re
secret_code = ‘‘‘ghkj08hs68xxIxxa14kgj4w314exxlove
xxbvk14rgjhxxyouxxfj4286ykjhag2‘‘‘
#love后有换行符
b = re.findall(‘xx(.*?)xx‘, secret_code, re.S)
print b
>>
输出[‘I‘, ‘love\n‘, ‘you‘]
,re.S让.
匹配所有行,包括了换行符(以\n
的形式出现
4)sub
import re
s = ‘123abcssfasdfas123‘
output = re.sub(‘123(.*?)123‘, ‘123789123‘, s)
print output
>>
- 输出
123789123
- sub将符合条件的()内内容提换
6)compile用法
import re
secret_code = ‘‘‘ghkj08hs68xxIxxa14kgj4w314exxlove
xxbvk14rgjhxxyouxxfj4286ykjhag2‘‘‘
pattern = ‘xx(.*?)xx‘
new_pattern = re.compile(pattern, re.S)
b = re.findall(new_pattern, secret_code)
print b
因为findall自动调用compile方法,所以不先编译规律compile再匹配
7)匹配纯数字(\d+)
import re
a = ‘dfhkgh43gfhja873y5t2167715‘
b = re.findall(‘(\d+)‘, a)
print b
>>
- 输出
[‘43‘, ‘873‘, ‘5‘, ‘2167715‘]