Exemplo n.º 1
0
re.subn()	#匹配字符串并替换,同时会返回替换次数
re.escape(r'(*+?)') #跳过re的符号功能,表示其本身.
re.compile(pattern)
	re.compile().flags
	re.compile().pattern
	re.compile().groupindex
#反斜杠的困扰 
'''与大多数编程语言相同,正则表达式里使用"\"作为转义字符,这就可能造成反斜杠困扰。
假如你需要匹配文本中的字符"\",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\\\\":
前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。
Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r"\\"表示。
同样,匹配一个数字的"\\d"可以写成r"\d"。有了原生字符串,你再也不用担心是不是漏写了反斜杠,
写出来的表达式也更直观。'''

#匹配模式flags
flags=re.I(re.IGNORECASE) #忽略大小写(括号内是完整写法,下同)
flags=re.M(MULTILINE) #多行模式,改变'^'和'$'的行为(参见上图)
flags=re.S(DOTALL) #点任意匹配模式,改变'.'的行为

---------random----------
random.random() #生成一个0到1的随机浮点数
random.uniform(a,b) #生成一个指定范围a到b的随机浮点数
random.randint(a,b) #生成一个[a,b]的随机整数
random.randrange(a,b,step=c) #步长为c,从[a,b)随机取一个数
random.choice(sequence) #从序列中随机获取一个元素,在python中list、tuple、character都属于sequence
random.sample(sequence,k) #从指定序列中获取指定长度k的片段
random.shuffle(sequence) #对序列进行随机排列(洗牌)

---------glob----------
glob.glob(path) # 将路径作为列表返回
---------OS-------------
Exemplo n.º 2
0
>>> re.compile('\w+@\w+\.(com|cn|edu)')
re.compile('\\w+@\\w+\\.(com|cn|edu)')
>>> pattern = re.compile('\w+@\w+\.(com|cn|edu)')
>>> pattern
re.compile('\\w+@\\w+\\.(com|cn|edu)')
>>> pattern.fullmatch('*****@*****.**')
<_sre.SRE_Match object; span=(0, 18), match='*****@*****.**'>

注:先编译好规则,并赋值给一个变量,再通过变量去fullmatch一个字符串
   这样的做法与直接fullmatch一个字符串是没有区别的,只不过这样做对于大批量的正则匹配会提高效率




################################## flags标志符 ###################################
re.I(re.IGNORECASE):忽略大小写
M(MULTILINE):多行模式,改变'^'和'$'的行为
S(DOTALL):改变'.'的行为,
X(re.VERBOSE)可以给你的表达式写注释,使其更可读


例题:
>>> re.search('a','alex')
<_sre.SRE_Match object; span=(0, 1), match='a'>
>>> re.search('a','Alex')
>>> re.search('a','Alex',re.I)
<_sre.SRE_Match object; span=(0, 1), match='A'>


例题:
>>> re.search('foo.$','foo1\nfoo2\n')
Exemplo n.º 3
0
# re.match            #从头开始匹配
# re.search           #匹配包含
# re.findall          #把所有匹配到的字符放到以列表中的元素返回
# re.splitall         #以匹配到的字符当做列表分隔符
# re.sub              #匹配字符并替换

import re
#'(?P<name>...)' 分组匹配
re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})",
          "371481199306143242").groupdict("city")
#    {'province': '3714', 'city': '81', 'birthday': '1993'}

re.search('(?P<province>[0-9]{6})(?P<birthday>[0-9]{8})(?P<houxu>[0-9]{4})',
          '441481199510043339').groupdict('houxu')
#    {'province': '441481', 'houxu': '0433', 'birthday': '199510'}

##替换
re.sub()
re.sub('[0-9]+', '|', 'abc12de34f5g6h')
#    'abc|de|f|g|h'
re.sub('[0-9]+', "|", 'a1b2c3d4e5f6g7', count=2)
#    'a|b|c3d4e5f6g7'

#正则表达式里使用"\"作为转义字符
#正则表达式可以使用r"\\"表示。同样,匹配一个数字的"\\d"可以写成r"\d
'''
re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法,下同)
M(MULTILINE): 多行模式,改变'^'和'$'的行为(参见上图)
S(DOTALL): 点任意匹配模式,改变'.'的行为
'''
Exemplo n.º 4
0
\视图代码
# 在线正则表达式测试:tool.oschina.net/regex/#
import re

\re模块 re.compile、re.match、 re.search :推荐使用 re.match
正则匹配的时候,第一个字符是 r,表示 raw string 原生字符,意在声明字符串中间的特殊字符不用转义。
比如表示 ‘\n',可以写 r'\n',或者不适用原生字符 ‘\n'。

\re.compile() 函数
编译正则表达式模式,返回一个对象。可以把常用的正则表达式编译成正则表达式对象,方便后续调用及提高效率。
# re.compile(pattern, flags=0)
    # pattern 指定编译时的表达式字符串
    # flags 编译标志位,用来修改正则表达式的匹配方式。支持 re.L|re.M 同时匹配
    # flags 标志位参数

re.I(re.IGNORECASE)
使匹配对大小写不敏感

re.L(re.LOCAL) 
做本地化识别(locale-aware)匹配

re.M(re.MULTILINE) 
多行匹配,影响 ^ 和 $

re.S(re.DOTALL)
使 . 匹配包括换行在内的所有字符

re.U(re.UNICODE)
根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.

re.X(re.VERBOSE)
Exemplo n.º 5
0
# 正则表达式
# 通配符
# . 表示与任何一个字符进行匹配
# * 表示与此前的字符匹配0或者多次
# ? 匹配0 或者1 次   限定符
# + 1次 或 多次
# .* 最大匹配
# .*? 最小匹配
# ^ 开头\A   $结尾 \Z
# \b 单词的边界 \B
# \d  十进制数字  \D
# \w  任何字母数字 \W
# \s  任何空格字符(空格、tab、换行。。。) \S
#方法:
#re.compile(strPattern[, flag]):
"""
re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法,下同)
M(MULTILINE): 多行模式,改变'^'和'$'的行为(参见上图)
S(DOTALL): 点任意匹配模式,改变'.'的行为
L(LOCALE): 使预定字符类 \w \W \b \B \s \S 取决于当前区域设定
U(UNICODE): 使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性
X(VERBOSE): 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。以下两个正则表达式是等价的:
"""
m = re.match(r'(\w+) (\w+)(?P<sign>.*)', 'hello world!')
print("m.string:", m.string)
print("m.re:", m.re)
print("m.pos:", m.pos)
print("m.endpos:", m.endpos)
print("m.lastindex:", m.lastindex)
print("m.lastgroup:", m.lastgroup)
#group([group1, …]):
Exemplo n.º 6
0
下图列出了Python支持的正则表达式元字符和语法:
1.2. 数量词的贪婪模式与非贪婪模式 
正则表达式通常用于在文本中查找匹配的字符串。Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符;非贪婪的则相反,总是尝试匹配尽可能少的字符。例如:正则表达式"ab*"如果用于查找"abbbc",将找到"abbb"。而如果使用非贪婪的数量词"ab*?",将找到"a"。 
1.3. 反斜杠的困扰 
与大多数编程语言相同,正则表达式里使用"\"作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的字符"\",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\\\\":前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r"\\"表示。同样,匹配一个数字的"\\d"可以写成r"\d"。有了原生字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。
1.4. 匹配模式 
正则表达式提供了一些可用的匹配模式,比如忽略大小写、多行匹配等,这部分内容将在Pattern类的工厂方法re.compile(pattern[, flags])中一起介绍。 
2. re模块 
2.1. 开始使用re 
Python通过re模块提供对正则表达式的支持。使用re的一般步骤是先将正则表达式的字符串形式编译为Pattern实例,然后使用Pattern实例处理文本并获得匹配结果(一个Match实例),最后使用Match实例获得信息,进行其他的操作。 
 
代码如下:
re.compile(strPattern[, flag]): 
这个方法是Pattern类的工厂方法,用于将字符串形式的正则表达式编译为Pattern对象。 第二个参数flag是匹配模式,取值可以使用按位或运算符'|'表示同时生效,比如re.I | re.M。另外,你也可以在regex字符串中指定模式,比如re.compile('pattern', re.I | re.M)与re.compile('(?im)pattern')是等价的。 
可选值有: 
re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法,下同) 
M(MULTILINE): 多行模式,改变'^'和'$'的行为(参见上图) 
S(DOTALL): 点任意匹配模式,改变'.'的行为 
L(LOCALE): 使预定字符类 \w \W \b \B \s \S 取决于当前区域设定 
U(UNICODE): 使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性 
X(VERBOSE): 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。以下两个正则表达式是等价的: 
代码如下:
re提供了众多模块方法用于完成正则表达式的功能。这些方法可以使用Pattern实例的相应方法替代,唯一的好处是少写一行re.compile()代码,但同时也无法复用编译后的Pattern对象。这些方法将在Pattern类的实例方法部分一起介绍。如上面这个例子可以简写为: 
re模块还提供了一个方法escape(string),用于将string中的正则表达式元字符如*/+/?等之前加上转义符再返回,在需要大量匹配元字符时有那么一点用。 
2.2. Match 
Match对象是一次匹配的结果,包含了很多关于此次匹配的信息,可以使用Match提供的可读属性或方法来获取这些信息。 
属性: 
string: 匹配时使用的文本。 
re: 匹配时使用的Pattern对象。 
pos: 文本中正则表达式开始搜索的索引。值与Pattern.match()和Pattern.seach()方法的同名参数相同。 
endpos: 文本中正则表达式结束搜索的索引。值与Pattern.match()和Pattern.seach()方法的同名参数相同。