re-正则表达式模块

前端之家收集整理的这篇文章主要介绍了re-正则表达式模块前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

import re

预定义字符集:

\d:数字[0-9]

\D:非数字[^\d]

\s:空白字符[<空格>\t\r\n\f\v]

\S:非空白字符[^\s]

\w:单词字符[A-Za-z0-9_]

\W:非单词字符[^\w]

匹配数量

.:匹配除换行符以外的任何单个字符

*:匹配前一个字符0或无限次(尽可能多的匹配)

*?:尽可能少的进行匹配前边的正则表达式

+:匹配前一个字符1次或无限次(尽可能多的匹配)

+?:尽可能少的进行匹配前边的正则表达式

?:匹配前一个字符0次或1次(尽可能多的匹配)

??:尽可能少的进行匹配前边的正则表达式

{m}:匹配前一个字符m次

{m,n}:匹配前一个字符m至n次(尽可能多的匹配)

{m,n}?:尽可能少的进行匹配前边的正则表达式

\:转义字符

?P<name>R:R表示为正则表达式,对正则表达式匹配到的内容进行命名

函数

match():从字符串第一个字符开始匹配,直到不能匹配到为止,并返回匹配到的字符串;如果开头不能匹配则返回NoneType报错信息

例:

a = 'kjksajt3w9#53~59/35(*_dvds~r)3'

m = re.match("\w+",a)

m.group()

wKioL1h8XlqA5mQjAAAHBSO6k_8922.png

search():在所有的字符串中开始进行匹配,返回匹配到的第一个结果

例:

a = 'kjksajt3w9#53~59/35(*_dvds~r)3'

m = re.search("dvd",a)

m.group()

wKiom1h8XqHRW8cKAAAFgeJnvCo883.png

findall():返回所有匹配到的结果;返回一个列表

例:

a = 'kjksajt3w9#53~59/35(*_dvds~r)3'

re.findall("[a-zA-Z]+",a)

wKioL1h8XuXBAKmNAAAJpgfGSd8545.png

split():用匹配到的字符对字符串进行切割;返回一个列表

例:

a = 'kjksajt3w9#53~59/35(*_dvds~r)3'

re.split("\d+",a)

wKioL1h8XzTgyqREAAAJn9h0yDs284.png

sub():把匹配到的内容进行替换,可以设定替换次数;返回替换后的结果

例:

a = 'kjksajt3w9#53~59/35(*_dvds~r)3'

re.sub('\d+',"|",a,count=3)

wKioL1h8X3Gwhx1-AAAJCzEQ-10546.png

group():返回匹配到的结果,常跟在match和search之后

例:

a = 'kjksajt3w9#53~59/35(*_dvds~r)3'

re.match("\w+",a).group()

re.search("dvd",a).group()

compile():把正则表达式进行编译

例:

com = re.compile(r'\d+') #r表示自然字符串,里边的字符不会被转义

e = com.findall('ksdhfkjshdfjkwiu237yyy8w7ye782skdhfkj374ljhfk2')

print(e)

注:可以看到compile编译后返回一个对象,在进行大量匹配的时候,compile效率会更高

groups():分组,即只获取括号内的匹配到的数据;以元组的形式返回

例:

f = re.search('(\d+)hfkjshdfjkwiu(\d+)','ksd234234hfkjshdfjkwiu237yyy8w7ye782')

print(f.groups())

wKioL1h8YCyQeF5NAAAHWg1uhAY942.png

groupdict():以命名方式匹配成功后,同时返回名字和匹配到的内容

例:

o = re.compile(r'(?P<name>\d+)')

m = o.search('127.0.0.1')

m.groupdict()

wKiom1h8YF-S9pI2AAAMUEU5Gmg184.png

用正则匹配一条Nginx日志:

日志:

66.249.69.131 - - [10/Aug/2016:03:20:09 +0800] "GET /robots.txt HTTP/1.1" 404 162 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"

匹配规则:

p = r'(?P<ip>\d{1,3}\.\d{1,3}) .* .* \[(?P<time>.*)\] "(?P<method>\w+) (?P<url>[^\s]*) (?P<version>[\w|/\.\d]*)" (?P<status>\d{3}) (?P<length>\d+) "(?P<refer>[^\s]*)" "(?P<userAgent>.*)"'

匹配结果:

{'ip': '66.249.69.131',

'length': '162',

'method': 'GET',

'refer': '-',

'status': '404',

'time': '10/Aug/2016:03:20:09 +0800',

'url': '/robots.txt',

'userAgent': 'Mozilla/5.0 (compatible; Googlebot/2.1; '

'+http://www.google.com/bot.html)',

'version': 'HTTP/1.1'}

wKioL1h8YPzTP9OTAAAblgmdijU933.png

猜你在找的正则表达式相关文章