下午,看到堆栈的内容。于是上机实验了一番
>>> 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