python---正则表达式

1.什么是正则表达式?

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

2. 常见语法

a. 直接匹配汉字或者字母

  python代码如下所示:

import re

content = '''
I love China
I love Shaanxi
I love Xi'an
'''

p = re.compile(r'love')

for one in p.findall(content):
    print(one)

b. 点匹配所有字符

. 表示要匹配所有除换行字符以外的所有单个字符

提取下边文字里所有的颜色

 python代码:

import re

content = '''
我最喜欢蓝色,
她最喜欢粉色,
小红最喜欢红色
'''

p = re.compile(r'.色')

for one in p.findall(content):
    print(one)

运行结果:
蓝色
粉色
红色

c. 星重复匹配任一次

* 表示匹配前面的子表达式任意次,包括0次

提取冒号后边的所有字符

                           

 

特别是最后一行,冒号后面没有其它字符了,但是*表示可以匹配0次, 所以表达式也是成立的。

 python代码如下:

import re

content = '''
我最喜欢的颜色:蓝色
她最喜欢的颜色:粉色
小红最喜欢的颜色:红色
:
'''

p = re.compile(r':.*')

for one in p.findall(content):
    print(one)

运行结果:

:蓝色
:粉色
:红色

 

注意, .* 在正则表达式中非常常见,表示匹配任意字符任意次数。

当然这个 * 前面不是非得是 点 ,也可以是其它字符

 

 

 d. 加号重复匹配多次

+ 表示匹配前面的子表达式一次或多次,不包括0次。

最后一行,冒号后面没有其它字符了,+表示至少匹配1次, 所以最后一行没有子串选中。

 

import re

content = '''
我最喜欢的颜色:蓝色
她最喜欢的颜色:粉色
小红最喜欢的颜色:红色
:
'''

p = re.compile(r':.*')

for one in p.findall(content):
    print(one)

运行结果:
:蓝色
:粉色
:红色

e. 问号匹配0-1次

? 表示匹配前面的子表达式0次或1次。

从文本中,选择每行冒号后面的1个字符,也包括逗号本身。

 

 最后一行,冒号后面没有其它字符了,但是?表示匹配1次或0次, 所以最后一行也选中了一个冒号字符。

python代码:

import re

content = '''
我最喜欢的颜色:蓝色
她最喜欢的颜色:粉色
小红最喜欢的颜色:红色
:
'''

p = re.compile(r':.?')

for one in p.findall(content):
    print(one)

运行结果:
:蓝
:粉
:红
:

 f.花括号匹配指定次数

花括号表示 前面的字符匹配指定的次数。

\d{3}: 表示匹配连续的数字3次

 

python代码如下:

import re

content = '''
123456d789012345
'''

p = re.compile(r'\d{3}')

for one in p.findall(content):
    print(one)

运行结果:

123
456
789
012
345

 

\d{3,5} 表示匹配连续的数字至少3次,至多5次

 

 python代码:

import re

content = '''
123456d789012345
'''

p = re.compile(r'\d{3,5}')

for one in p.findall(content):
    print(one)

运行结果:
12345
78901
2345

g.贪婪模式和非贪婪模式

贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配。属于贪婪模式的量词,也叫做匹配优先量词,包括: 

“{m,n}”、“{m,}”、“?”、“*”和“+”。 

在匹配优先量词后加上“?”,即变成属于非贪婪模式的量词,也叫做忽略优先量词,包括: 

“{m,n}?”、“{m,}?”、“??”、“*?”和“+?”。 

贪婪模式:

 

 

 

 

 

非贪婪模式

 

 

 

h. 匹配某种字符类型

反斜杠后面接一些字符,表示匹配 某种类型 的一个字符。

\d 匹配0-9之间任意一个数字字符,等价于表达式 [0-9]

\D 匹配任意一个不是0-9之间的数字字符,等价于表达式 [^0-9]

\s 匹配任意一个空白字符,包括 空格、tab、换行符等,等价于表达式 [\t\n\r\f\v]

\S 匹配任意一个非空白字符,等价于表达式 [^ \t\n\r\f\v]

\w 匹配任意一个文字字符,包括大小写字母、数字、下划线,等价于表达式 [a-zA-Z0-9_]

缺省情况也包括 Unicode文字字符,如果指定 ASCII 码标记,则只包括ASCII字母

\W 匹配任意一个非文字字符,等价于表达式 [^a-zA-Z0-9_]

反斜杠也可以用在方括号里面,比如 [\s,.] 表示匹配 : 任何空白字符, 或者逗号,或者点

I. 方括号-匹配几个字符之一

[abc] 可以匹配 a, b, 或者 c 里面的任意一个字符。等价于 [a-c] 。

[a-c] 中间的 - 表示一个范围从a 到 c。

如果你想匹配所有的小写字母,可以使用 [a-z]

 

 如果在方括号中使用 ^ , 表示  方括号里面的字符集合。

 

posted @ 2022-02-17 14:53  ElsaWang  阅读(156)  评论(0)    收藏  举报