订阅
纠错
加入自媒体

python的正则(一):简单够用的basic版

2020-07-14 17:05
ExASIC
关注

字符集合

[...] 字符集合,[]中的特殊字符表示字符本身

[^...] 字符集合以外的字符

分组匹配

| 或,比如A|B,如果A没匹配到,就匹配B

匹配次数(重复次数)

* 重复大于等于0次

+ 重复大于等于1次

? 重复0次或1次

非贪婪模式

*? 

+? 

??

默认是贪婪模式,尽可能多的匹配。比如verilog里有很多个begin end块。'begin.*end'是从第一个begin匹配到最后一个end,这往往不是我们想要的。如果我只需要匹配到第一个end,用非贪婪模式'begin.*?end'即可。

1begin

2...

3end

4begin

5...

6end

7begin

8...

9end

引用

(...) 括号中内容可以再后续引用

基本规则介绍完毕。下面介绍几个re模块的函数。

re模块的函数

在Perl中,匹配和替换用下面的语法:

1$str =~ m/.../;

2$str =~ s/.../.../;

re.search

而Python中,由于一切都是对象,我们需要使用re模块中的方法(函数)来实现。在re中有一个search函数,第一个参数是pattern,就是正则,第二个参数是被匹配的字符串。需要注意的是:正则本身也是一个字符串,常使用raw字符串,即r'...',可以避免一些不必要的转义。

1import re

2result = re.search(r'pattern', 'string', option)

如果匹配到了,result.group(0)则是匹配到的字符串;如果没有匹配到,result则为None。所以,可以根据result是不是None来判断是否查找到指定的字符串。例如:

1import re

2s = 'input wire a;input wire b;'

3result = re.search(r'wires+w+;', s)

4print(result.group(0))  # wire a

5if result: # if not result:

6    ...

在正则中加括号()来引用匹配的子字符串,例如下面的一段代码,对verilog信号名a和b加括号,则result.group(1)表示第一个括号匹配的子字符串a,result.group(2)表示第二个括号匹配的子字符串b。而result.group(0)表示匹配的全部字符串。

1import re

2s = 'input wire a;input wire b;'

3result = re.search(r'wires+(w+).*wires(w+)', s, re.S)

4print(result.group(0))  # wire a;input wire b

5print(result.group(1))  # a

6print(result.group(2))  # b

由于原字符串带有换行符,默认.*不能跨越换行符匹配,需要加上re.S的选项才可以。除了re.S还有其它一些常见选项:

re.S    当作单行(Singal line)来匹配

re.M   当作多行(Multi line)来匹配

re.I     忽略(Ignore)大小写

re.sub

正则的主要作用,是进行高级查找和替换,查找是search(),替换就是sub(),如下所示:

1import re

2result = re.sub(r'pattern', r'replace', 'string', count=0, option)

在'string'中查找'pattern',并替换成'replace';

replace为空字符串''时,等同于删除;

count指定替换的次数,默认0是全部替换;

option与search中的相同,可以指定单行、多行、大小写等;

返回值是替换后的新字符串,如果没有匹配到,返回老字符串。

<上一页  1  2  3  下一页>  
声明: 本文由入驻维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。

发表评论

0条评论,0人参与

请输入评论内容...

请输入评论/评论长度6~500个字

您提交的评论过于频繁,请输入验证码继续

暂无评论

暂无评论

人工智能 猎头职位 更多
扫码关注公众号
OFweek人工智能网
获取更多精彩内容
文章纠错
x
*文字标题:
*纠错内容:
联系邮箱:
*验 证 码:

粤公网安备 44030502002758号