关于分组优先以及 " | " 的细致练习
from django.test import TestCaseimport re# Create your tests here.ret = re.findall(r"-?\d+\.\d*|-?\d+", "1-2*(60+(-40.35/5)-(-4*3))")print(ret) # ['1', '-2', '60', '-40.35', '5', '-4', '3']ret = re.findall(r"-?\d+\.\d*|(-?\d+)", "1-2*(60+(-40.35/5)-(-4*3))")print(ret) # ['1', '-2', '60', '', '5', '-4', '3']ret = re.findall(r"-?\d+|-?\d+\.\d*", "1-2*(60+(-40.35/5)-(-4*3))")print(ret) # ['1', '-2', '60', '-40', '35', '5', '-4', '3']ret = re.findall(r"-?\d+|(-?\d+\.\d*)", "1-2*(60+(-40.35/5)-(-4*3))")print(ret) # ['', '', '', '', '', '', '', '']ret = re.findall(r"(-?\d+\.\d*)|-?\d+", "1-2*(60+(-40.35/5)-(-4*3))")print(ret) # ['', '', '', '-40.35', '', '', '']
"|" 的匹配顺序从左向右 , 而且一旦匹配上了就不会匹配后面的那段正则
"()" 是将被匹配的优先显示, 但是匹配不中的内容会被用 "" 空字符串来表示
多个分组的匹配
先按照整体正则匹配, 然后在提取()中,如果有两个分组(), 则以元组形式显示
import res = "A B C D"# p1 = re.compile("\w+\s+\w+")# print(p1.findall(s)) # ['A B', 'C D']p1 = re.compile("(\w+)\s+\w+")print(p1.findall(s)) # 第一步 ['A B','C D'] # ['(\w+)\s+\w+','(\w+)\s+\w+']# 第二步 ['A','C'] # ['(\w+)', '(\w+)']p1 = re.compile("(\w+)\s+(\w+)")print(p1.findall(s))# 第一步 ['A B','C D'] # ['(\w+)\s+(\w+)','(\w+)\s+(\w+)'] # 第二步 [('A','B'),('C','D')] # [('(\w+)','(\w+)'),('(\w+)','(\w+)')]
进阶的练习