正则表达式

元字符

.	匹配除换行符以外的任意字符
\w	匹配字母或数字或下划线或汉字
\s	匹配任意的空白符
\d	匹配数字
\b	匹配单词的开始或结束
^	匹配字符串的开始
$	匹配字符串的结束

反义

\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意非空白字符
\D 任意非数字字符
\B 任意非单词开头或结束的位置
[^x] 除了x以外的任意字符
[^abcd] 除了abcd这几个字母的任意字符

重复限定符

*	重复零次或更多次
+	重复一次或更多次
?	重复零次或一次
{n}	重复n次
{n,}	重复n次或更多次
{n,m}	重复n到m次

分组

正则表达式中用小括号()来做分组,也就是括号中的内容作为一个整体。

条件或

使用|表示或关系

# 匹配130或者131开头的号码
^(130|131)\d{8}$

贪婪模式

贪婪模式下正则会尽量多的匹配字符

str = '123456'

\d{3,6} 匹配出来的则是‘123456’, 尽管‘123’也满足,但是因为贪婪模式,所以会尽量匹配6.

懒惰模式(非贪婪)

*? 重复任意次,但尽量少重复
+?  重复1次或者多次,尽量少重复
?? 重复0次或1次,尽量少重复
{n, m}? 重复n到m次, 尽量少重复

每项更详细的解释

regexp

python 正则官方文档

howto reg

python正则例子

import re

def run():
    test_str = 'int a = 3; int b = 4;'
    split_results = re.split('\=|\;', test_str)# |表示=或者\都可以
    print(split_results)

    match_objs = re.match('.*\=(.*);.*\=(.*)\;', test_str) 
    if match_objs is not None:
        print(match_objs.groups())

    test_str = \
    '''
        LOGD("result is %.3f, interval:(%.3f, %.2f)", 
        3.5, 0.0, 1.0); 
        int var = 5;
    '''
    contens_in_brace = re.match("\t*\s*LOGD\((.*\n*.*)\)\;", test_str).groups()[0]
    print(contens_in_brace)


if __name__ == '__main__':
    run()

打印结果:

['int a ', ' 3', ' int b ', ' 4', '']
(' 3', ' 4')
"result is %.3f, interval:(%.3f, %.2f)",
        3.5, 0.0, 1.0

re.sub

替换字符串.
def myfunc():替换为:

static PyObject*
py_myfunc(void)
{

对应python代码:

re.sub(r'def\s+([a-zA-Z_][a-zA-Z_0-9]*)\s*\(\s*\):',
        r'static PyObject*\npy_\1(void)\n{',
        'def myfunc():')

查找并返回一个匹配项的函数有: search、match他们的区别分别是:

  • search: 查找任意位置的匹配项

  • match: 必须从字符串开头匹配

  • re.split
    re.split(pattern, string, maxsplit=0, flags=0) 函数:用 pattern 分开 string , maxsplit表示最多进行分割次数,

  • 替换
    替换主要有sub函数 与 subn函数,他们功能类似! 先来看看sub函数的用法: re.sub (pattern, repl, string, count=0, flags=0) 函数参数讲解:repl替换掉string中被pattern匹配的字符, count表示最大替换次数,flags表示正则表达式的常量。 值得注意的是:sub函数中的入参:repl替换内容既可以是字符串,也可以是一个函数哦! 如果repl为函数时,只能有一个入参:Match匹配对象。

vscode中使用正则替换

比如想将python2中的print替换为python3的print语法, 除了用2to3命令, 也可以使用正则

print 'you are 100 years old'

使用vscode 的replace 命令, 选择正则填写

print\s(\S+)\s*

替换目标为:

print($1)

既可将上面的print代码替换为:

print('you are 100 years old')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值