python标准库re模块和正则表达式

正则表达式的概念

1.使用单个字符串来描述匹配一系列符合某个句法规则的字符串
2.是对字符串操作的一种逻辑公式
3.应用场景:处理文本和数据
4.正则表达式过程:依次拿出表达式和文本中的字符比较,如果每一个字符都匹配,则匹配成功,否则匹配失败

正则表达式本身和Python没有什么关系,它就是匹配字符串内容的一种规则。
在Python中通过内嵌集成re模块,程序员可以直接调用re模块来实现正则匹配。
正则表达式模块被编译成一系列的字节码,然后由C编写的匹配引擎执行。

正则表达式的语法(部分)

image.png

在线正则表达式测试

https://tool.oschina.net/regex
该网站可以测试正则表达式的匹配结果,并且给出了常用的正则表达式

image.png

python中re模块使用方法

re.match(pattern, string, flags=0)

尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回None

re.search(pattern, string, flags=0)

扫描整个字符串并返回第一个成功的匹配

re.compile(pattern, flags=0)

用于编译正则表达式,生成一个正则表达式(pattern)对象

re.findall(pattern, string, flags=0)

在字符串中查找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表

re.sub(pattern, repl, string, count=0, flags=0)

将字符串中匹配正则表达式的部分替换为其他指

re.split(pattern, string, maxsplit=0, flags=0)

根据匹配分割字符串,返回分割字符串组成的列表

示例代码


import re
'''
re.match(pattern, string, flags=0)
尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回None

匹配成功re.match方法返回一个匹配的对象,否则返回None。
我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。
'''
def test_re_match():
    teststr = 'python'
    result = re.match(r'py', teststr)
    print(result.group()) #匹配成功
    result1 = re.match(r'th', teststr)
    print(result1) #匹配失败返回None


'''
re.search(pattern, string, flags=0)
扫描整个字符串并返回第一个成功的匹配。

匹配成功re.search方法返回一个匹配的对象,否则返回None。
我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。
'''
def test_re_search():
    teststr = 'python12134'
    result = re.search(r'\d+', teststr)
    print(result.group())  # 匹配成功并返回第一个找到的匹配
    result1 = re.search(r'\s', teststr)
    print(result1)  # 匹配失败返回None


'''
re.match  只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;
re.search 匹配整个字符串,直到找到第一个匹配。
'''
def test_compare_match_search():
    teststr = 'python is a simple language'

    result = re.match(r'simple', teststr)
    if result:
        print('match->result.group():', result.group())
    else:
        print('not match')

    result = re.search(r'simple', teststr)
    if result:
        print('search->result.group():', result.group())
    else:
        print('not search')


'''
re.compile(pattern, flags=0)
函数用于编译正则表达式,生成一个正则表达式( Pattern )对象
'''
def test_re_compile():
    teststr = 'python12134'
    pattern = re.compile(r'\d+')
    result = re.search(pattern, teststr)
    print(result.group())  # 匹配成功并返回第一个匹配
    result = re.match(pattern, teststr)
    print(result)  # 匹配失败返回None


'''
re.findall(pattern, string, flags=0)
在字符串中查找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表
'''
def test_re_findall():
    teststr = 'python12134python222test256'
    pattern = re.compile(r'\d+')
    result = re.findall(pattern, teststr)
    print(result)  # 匹配成功并返回所有的匹配组成的一个列表


'''
re.sub(pattern, repl, string, count=0, flags=0) 
将字符串中匹配正则表达式的部分替换为其他值
'''
def test_re_sub():
    teststr = 'python12134is222the256simple555language'
    pattern = re.compile(r'\d+')
    result = re.sub(pattern, ' ', teststr)
    print(result)  # 将数字全部替换成空格


'''
re.split(pattern, string, maxsplit=0, flags=0)
根据匹配分割字符串,返回分割字符串组成的列表
'''
def test_re_split():
    teststr = 'python12134is222the256simple555language'
    pattern = re.compile(r'\d+')
    result = re.split(pattern, teststr)
    print(result)  # 用匹配的值进行分割并返回一个列表


def main():
    print('*' * 50)
    print('re.match 函数的使用方法:')
    test_re_match()

    print('*' * 50)
    print('re.search 函数的使用方法:')
    test_re_search()

    print('*' * 50)
    print('re.match and re.search 比较:')
    test_compare_match_search()

    print('*' * 50)
    print('re.compile 函数的使用方法:')
    test_re_compile()

    print('*' * 50)
    print('re.findall 函数的使用方法:')
    test_re_findall()

    print('*' * 50)
    print('re.sub 函数的使用方法:')
    test_re_sub()

    print('*' * 50)
    print('re.split 函数的使用方法:')
    test_re_split()


if __name__ == '__main__':
    main()

运行结果


re.match 函数的使用方法:
py
None


re.search 函数的使用方法:
12134
None


re.match and re.search 比较:
not match
search->result.group(): simple


re.compile 函数的使用方法:
12134
None


re.findall 函数的使用方法:
['12134', '222', '256']


re.sub 函数的使用方法:
python is the simple language


re.split 函数的使用方法:
['python', 'is', 'the', 'simple', 'language']

Process finished with exit code 0

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容