re 模块错误 error: bad character range

 

下午,看到堆栈的内容。于是上机实验了一番

>>> bds = '10+6/5-4*2' # 数学运算表达式

 

想用 findall 把运算符号提取出来

>>> import re
>>> m = re.findall(r'[+-*/]', bds) # 习惯性地按加减乘除顺序排列:'[+-*/]'

 

可是报错: bad character range

>>> 
... ... 
... ... error: bad character range

错误的字符域?这是什么鬼?会不会跟字符排列顺序有关?

 

好吧,先看看这四个字符的 ascii 码:

>>> print([ord(x) for x in '+-*/'])
 [43, 45, 42, 47]

哦,其中星号 '*' 的码值 42 最小。

 

死马当活马医,把原来的 '+-*/' 按码值调整为 '*+-/' ,看看又如何:

>>> m = re.findall(r'[*+-/]', bds) # 按ASCII码值调整顺序为:'[*+-/]'
>>> m
 ['+', '/', '-', '*']

哇,终于搞定!!

 

总结:

一个猜想:re模块搜查单字符,其字符集合必须按其ASCII值(或者说编码值)由小到大排列,否则报错: error: bad character range

 

转载于:https://www.cnblogs.com/hhh5460/p/5166822.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值