正则表达式

一、括号的应用:

1.方括号:[字符1字符2]:表示匹配字符1或字符2  ,是选择方括号里字符的意思,如果 .  ^等特殊字符在方括号里,就没有了对应作用

如:   [\d.]+   代表数字或者点 出现1次或者多次

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

import re
content = 'a1b2c3d4e5'
p = re.compile(r'[^\d]' )
for one in  p.findall(content):
    print(one)

运行结果:

a
b
c
d
e

[^\d] 表示,选择非数字的字符

2.花括号:{n}、{n,m} 表示匹配指定的次数

如:Titen{3,4} 匹配n 最少3次 最多4次

3.圆括号()表示分组

二、次数的显示:

.  表示任意单个字符

*  表示0次或者多次(个)

+ 表示1次或者多次(个)

?表示1次或者0次(个)

三、匹配开头或者结束

^  匹配文本开头

$  匹配文本结束

注意多行模式或者单行模式: 默认的单行

如:

content = '''001-键盘价格-60
002-鼠标价格-70
003-显示器价格-80'''

import re
p = re.compile(r'^\d+', re.M)
for one in  p.findall(content):
    print(one)

运行结果:

001
002
003

去掉re.M,结果 001

$:

content = '''001-键盘价格-60
002-鼠标价格-70
003-显示器价格-80'''

import re
p = re.compile(r'\d+$', re.M)
for one in  p.findall(content):
    print(one)

运行结果:

60
70
80

去掉re.M,结果为:80(只是匹配结束位置)

四、反斜杠\ 转义

1.比如需要匹配字符串有点.  而且此时不需要它有其他特殊含义,只需要表达对应的意思,就需要\.  表示这个是一个字符串的点

如:我们.是中国人   需要匹配:我们.对应的表达式: .*\.

2.特殊字符

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

\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,.] 表示匹配 : 任何空白字符, 或者逗号,或者点

五、正则切割

import re

names = '苹果; 相机, 纸巾,   鼠标, 大象  李小龙'

namelist = re.split(r'[;,\s]\s*', names)
print(namelist)

正则表达式 [;,\s]\s* 指定了,分割符为 分号、逗号、空格 里面的任意一种均可,并且 该符号周围可以有不定数量的空格。

六、替换

import re

names = '''
<a av66771949/?p=>
<a av46349552/?p=>
<a av90571967/?p=>
'''
newStr = re.sub(r'/av\d+?/', '/cn345677/' , names)
print(newStr)

 列如:

$ 在正则中代表匹配文末末尾,( )左右圆括号表示分组,所以要表达对应的字符串本意,需要加上转义符号,表达原本就是字符串,就需要\$、 \( 、\)这样表示

 regexp = "\\${(.*?)\\((.*?)\\)}"
 regexp = r"\${(.*?)\((.*?)\)}"

  

posted on 2022-09-25 20:41  Titen  阅读(35)  评论(0编辑  收藏  举报

导航