加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 创业 > 正文

Python正则表达式指南保举

发布时间:2020-11-03 19:04:45 所属栏目:创业 来源:网络整理
导读:本文先容了Python对付正则表达式的支持,包罗正则表达式基本以及Python正则表达式尺度库的完备先容及行使示例。本文的内容不包罗怎样编写高效的正则表达式、怎样

print "m.group(1,2):", m.group(1, 2)
print "m.groups():", m.groups()
print "m.groupdict():", m.groupdict()
print "m.start(2):", m.start(2)
print "m.end(2):", m.end(2)
print "m.span(2):", m.span(2)
print r"m.expand(r'2 13'):", m.expand(r'2 13')

### output ###
# m.string: hello world!
# m.re: <_sre.SRE_Pattern object at 0x016E1A38>
# m.pos: 0
# m.endpos: 12
# m.lastindex: 3
# m.lastgroup: sign
# m.group(1,2): ('hello', 'world')
# m.groups(): ('hello', 'world', '!')
# m.groupdict(): {'sign': '!'}
# m.start(2): 6
# m.end(2): 11
# m.span(2): (6, 11)
# m.expand(r'2 13'): world hello!

2.3. Pattern

Pattern工具是一个编译好的正则表达式,通过Pattern提供的一系列要领可以对文本举办匹配查找。

Pattern不能直接实例化,必需行使re.compile()举办结构。

Pattern提供了几个可读属性用于获取表达式的相干信息:

pattern: 编译时用的表达式字符串。 flags: 编译时用的匹配模式。数字情势。 groups: 表达式平分组的数目。 groupindex: 以表达式中有别名的组的别名为键、以该组对应的编号为值的字典,没有别名的组不包括在内。

import re
p = re.compile(r'(w+) (w+)(?P<sign>.*)', re.DOTALL)

print "p.pattern:", p.pattern
print "p.flags:", p.flags
print "p.groups:", p.groups
print "p.groupindex:", p.groupindex

### output ###
# p.pattern: (w+) (w+)(?P<sign>.*)
# p.flags: 16
# p.groups: 3
# p.groupindex: {'sign': 3}

实例要领[ | re模块要领]:

match(string[, pos[, endpos]]) | re.match(pattern, string[, flags]):

这个要领将从string的pos下标处起实行匹配pattern;假如pattern竣事时仍可匹配,则返回一个Match工具;假如匹配进程中pattern无法匹配,可能匹配未竣事就已达到endpos,则返回None。

pos和endpos的默认值别离为0和len(string);re.match()无法指定这两个参数,参数flags用于编译pattern时指定匹配模式。

留意:这个要领并不是完全匹配。当pattern竣事时若string尚有剩余字符,如故视为乐成。想要完全匹配,可以在表达式末端加上界线匹配符'$'。

示例拜见2.1末节。 search(string[, pos[, endpos]]) | re.search(pattern, string[, flags]):

这个要领用于查找字符串中可以匹配乐成的子串。从string的pos下标处起实行匹配pattern,假如pattern竣事时仍可匹配,则返回一个Match工具;若无法匹配,则将pos加1后从头实行匹配;直到pos=endpos时仍无法匹配则返回None。

pos和endpos的默认值别离为0和len(string));re.search()无法指定这两个参数,参数flags用于编译pattern时指定匹配模式。

# encoding: UTF-8
import re

# 将正则表达式编译成Pattern工具
pattern = re.compile(r'world')

# 行使search()查找匹配的子串,不存在能匹配的子串时将返回None
# 这个例子中行使match()无法乐成匹配
match = pattern.search('hello world!')

if match:
 # 行使Match得到分组信息
 print match.group()

### 输出 ###
# world

split(string[, maxsplit]) | re.split(pattern, string[, maxsplit]):

凭证可以或许匹配的子串将string支解后返回列表。maxsplit用于指定最大支解次数,不指定将所有门割。

import re

p = re.compile(r'd+')
print p.split('one1two2three3four4')

### output ###
# ['one', 'two', 'three', 'four', '']

findall(string[, pos[, endpos]]) | re.findall(pattern, string[, flags]):

搜刮string,以列表情势返回所有能匹配的子串。

import re

p = re.compile(r'd+')
print p.findall('one1two2three3four4')

### output ###
# ['1', '2', '3', '4']

finditer(string[, pos[, endpos]]) | re.finditer(pattern, string[, flags]):

搜刮string,返回一个次序会见每一个匹配功效(Match工具)的迭代器。

import re

p = re.compile(r'd+')
for m in p.finditer('one1two2three3four4'):
 print m.group(),

### output ###
# 1 2 3 4

sub(repl, string[, count]) | re.sub(pattern, repl, string[, count]):

行使repl替代string中每一个匹配的子串后返回替代后的字符串。

当repl是一个字符串时,可以行使id或g、g引用分组,但不能行使编号0。

当repl是一个要领时,这个要领该当只接管一个参数(Match工具),并返回一个字符串用于替代(返回的字符串中不能再引用分组)。

count用于指定最多替代次数,不指按时所有替代。

import re

p = re.compile(r'(w+) (w+)')
s = 'i say, hello world!'

print p.sub(r'2 1', s)

def func(m):
 return m.group(1).title() + ' ' + m.group(2).title()

print p.sub(func, s)

### output ###
# say i, world hello!
# I Say, Hello World!

subn(repl, string[, count]) |re.sub(pattern, repl, string[, count]):

返回 (sub(repl, string[, count]), 替代次数)。

import re

p = re.compile(r'(w+) (w+)')
s = 'i say, hello world!'

print p.subn(r'2 1', s)

def func(m):
 return m.group(1).title() + ' ' + m.group(2).title()

print p.subn(func, s)

### output ###
# ('say i, world hello!', 2)
# ('I Say, Hello World!', 2)

以上就是Python对付正则表达式的支持。纯熟把握正则表达式是每一个措施员必需具备的手艺,这年初没有不与字符串打交道的措施了。笔者也处于低级阶段,与君共勉,^_^

其它,图中的非凡结构部门没有举出例子,用到这些的正则表达式是具有必然难度的。有乐趣可以思索一下,怎样匹配不是以abc开头的单词,^_^

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读