# 分组和分支
import re
# 分组 -- ()
# 分组就是将正则表达式中的某一部分使用()括起来看成一个整体,然后进行这个整体的操作。
str1 = '789abc789'
re_str = '(\d{3})abc(\d{3})'
r1 = re.findall(re_str, str1)
print(r1)
"""
正则表达式的分组操作,首先先按照正则表达式从字符串中匹配出合适的结果,
如果正则表达式中还有分组,那么就从这个结果中再提取分组的那一部分,
如果一个正则表达式中有多个分组,那么多个分组提取的结果会合并为一个元组。
"""
str2 = '小明今年30岁,刚刚在清华大学博士毕业,月薪10000元。'
re_str = '[\u4e00-\u9fa5]{4}(\d\d[岁]).*(\d{5}[元])'
r2 = re.findall(re_str, str2)
print(r2)
# 分支 -- |
# 正则1|正则2 -- 表示获取正则表达式1的内容或者正则表达式2的内容
# 练习:写一个正则表达式,能够匹配一个字符串,abc后面是三个任意数字或者是三个大写字母。
str3 = 'abc123,.!?gdjhasgjsaabcAQE'
# 方法一:
re_str = '(abc(\d{3}|[A-Z]{3}))'
r3 = re.findall(re_str, str3)
result = [i[0] for i in r3]
print(result)
# 方法二:
re_str = 'abc\d{3}|abc[A-Z]{3}'
# 转义符号 -- \
# 在正则表达式有特殊意义的符号前面加\,
# 能够让这个符号的功能消失,表示这个符号本身。
"""
匹配任意字符 -- .(点) --> \. --> 表示匹配.(点).
匹配数字 -- \d --> \\d --> 表示匹配\d这个字符串。
"""
# 除了在[]中有特殊用法的符号(^、-)以外,其他的符号在[]中表示其本身。
# [.] -- 表示匹配一个.
str4 = '3。1415926'
re_str = '\d[.]\d{7}'
r4 = re.findall(re_str, str4)
print(r4) # []
str5 = '3.1415926'
re_str = '\d[.]\d{7}'
r5 = re.findall(re_str, str5)
print(r5) # ['3.1415926']
输出:
D:\pythonProject\venv\Scripts\python.exe "D:/pythonProject/网课/正则表达式 分组与分支.py"
[('789', '789')]
[('30岁', '10000元')]
['abc123', 'abcAQE']
[]
['3.1415926']
Process finished with exit code 0