re 模块 分组特别说明

关于分组优先以及 " | " 的细致练习

from django.test import TestCase
import 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 re

s = "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+)')]
 
  
 
 

进阶的练习

 

 

 

转载于:https://www.cnblogs.com/shijieli/p/10624062.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值