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

3.2.1 正则表达式的语法(3)

发布时间:2020-12-14 01:10:10 所属栏目:百科 来源:网络整理
导读:(?(id/name)yes-pattern|no-pattern) 先判断 id 或 name 是否存在,如果存在就使用 yes-pattern 规则来匹配;如果不存在,就使用 no-pattern 匹配。并且 no-pattern 是可选的,可以不存在。 例子: print('()?(w+@w+(?:.w+)+)(?(1)|$)') m=re.findall(u'

(?(id/name)yes-pattern|no-pattern)

先判断idname是否存在,如果存在就使用yes-pattern规则来匹配;如果不存在,就使用no-pattern匹配。并且no-pattern是可选的,可以不存在。

例子:

print('(<)?(w+@w+(?:.w+)+)(?(1)>|$)')

m=re.findall(u'(<)?(w+@w+(?:.w+)+)(?(1)>|$)',

u'<a@t1.cn<a@t2.cn>a@t3.cn>a@t4.cn')

ifm:

print(m)

结果输出如下:

(<)?(w+@w+(?:.w+)+)(?(1)>|$)

[('<','a@t2.cn'),('','a@t4.cn')]

下面来介绍转义字符,主要由‘’和特定字符组成。如果指定的字符不在下面的列表里,re判断就会跳过‘’,直接使用第二个字符作为判断。例如:$在下面的字符里找不到,就以$来使用。

number

匹配与数字序号相同的组,组的序号从1开始。例如(.+)1就会匹配‘thethe’或者‘5555’,但不会匹配‘thethe’模式,因为(.+)1之间有一个空格,1就是表示与(.+)相同匹配的组。这种方式只能匹配199组号,如果超过99就认为是八进制数,同时零开头的数字也认为是八进制数字。注意的是在方括号[]内的任何数字,包括转义字符都认为普通的字符处理。

例子如下:

print(r'(.+)1')

m=re.findall(r'(.+)1',r'abcabcabcabc55565757')

ifm:

print(m)

输出结果如下:

(.+)1

['abc','5','57']

在这个例子里要注意的是正则表达式规则字符要使用r开头的原始字符串,或者采用双来表示数字,否则1又表示别的字符了。

A

表示仅从字符串的开始位置进行匹配。

例子如下:

print('Aabc')

m=re.findall(u'Aabc',u'abcAabc')

ifm:

print(m)

m=re.findall(u'abc',u'abcAabc')

ifm:

print(m)

输出结果如下:

Aabc

['abc']

['abc','abc']

从这里可以看到采用A之后,只匹配一个,而没有这个标志就会匹配任何地方的abc

b

在一个单词之前或之后匹配空字符串。单词定义的字符范围是UNICODEASCII或者下划线,空字符串定义为空格、非ASCII和非下划线字符。例如rbcaib表示‘cai’,‘cai.’,‘(cai)’等匹配,而不匹配‘caimouse’,‘cai8’。

例子:

print(r'b')

m=re.findall(r'bcaib',r'caimousecaicai8')

ifm:

print(m)

结果输出如下:

b

['cai']

B

在单词的开头或结尾匹配一个非空串。例如rcaiB表示匹配‘caimouse’,‘cai8’,‘cai_’,但不会匹配‘cai’,‘cai.’,‘cai!’。从这个意义来说与b是刚好相反的。

例子:

print(r'B')

m=re.findall(r'caiB',r'caimousecaicai8')

ifm:

print(m)

结果输出如下:

B

['cai','cai']

d

UNICODE模式之下:

匹配任何UNICODE的数字(在UNICODE里等同于[Nd])。包括[0-9],以及其它数字字符。如果设置ASCII标志,就仅限于[0-9],如果是这样,直接使用[0-9]的方式会更好。

8位模式之下:

匹配任何数字字符,等同于[0-9]

例子:

print(r'd')

m=re.findall(r'caid',r'caimousecaicai8')

ifm:

print(m)

结果输出如下:

d

['cai8']

D

匹配任何非数字字符之外的字符,与d的集合刚好相反。如果使用ASCII标志,与[^0-9]是相同的集合。不过使用ASCII标志之后,会影响整个正则表达式。如果只是想限制[^0-9]集合,直接使用这个会更好。

例子:

print(r'D')

m=re.findall(r'caiD',r'caimousecaicai8')

ifm:

print(m)

结果输出如下:

D

['caim','cai']

s

UNICODE模式之下:

匹配UNICODE分隔字符,包括空格、tnrfv等等。

8位模式之下:

匹配空格字符,同时也包括[tnrfv]

例子:

print(r's')

m=re.findall(r'cais',r'caimousecaicai8')

ifm:

print(m)

结果输出如下:

s

['cai']

S

匹配任何非空格字符。与s意义刚好相反。

例子:

print(r'S')

m=re.findall(r'caiS',r'caimousecaicai8')

ifm:

print(m)

输出结果如下:

S

['caim','cai8']

w

匹配任何非特定意义的字符。在8位的模式之下,就是与集合[a-zA-Z0-9]相同。

例子:

print(r'w')

m=re.findall(r'caiw',r'caimousecaicai8')

ifm:

print(m)

结果输出如下:

w

['caim','cai8']

W

匹配任何不组成词的字符。在8位模式之下,与[^a-zA-Z0-9]集合相同。

例子:

print(r'W')

m=re.findall(r'caiW',r'caimousecaicai8')

ifm:

print(m)

结果输出如下:

W

['cai']

Z

只在字符结尾进行匹配。

例子:

print(r'Z')

m=re.findall(r'caiZ',r'caimousencai')

ifm:

print(m)

输出结果如下:

Z

['cai']




蔡军生 QQ:9073204 深圳

(编辑:李大同)

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

    推荐文章
      热点阅读