正则表达式的概念
1.使用单个字符串来描述匹配一系列符合某个句法规则的字符串
2.是对字符串操作的一种逻辑公式
3.应用场景:处理文本和数据
4.正则表达式过程:依次拿出表达式和文本中的字符比较,如果每一个字符都匹配,则匹配成功,否则匹配失败
正则表达式本身和Python没有什么关系,它就是匹配字符串内容的一种规则。
在Python中通过内嵌集成re模块,程序员可以直接调用re模块来实现正则匹配。
正则表达式模块被编译成一系列的字节码,然后由C编写的匹配引擎执行。
正则表达式的语法(部分)
在线正则表达式测试
https://tool.oschina.net/regex
该网站可以测试正则表达式的匹配结果,并且给出了常用的正则表达式
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