下午,看到堆棧的內容。於是上機實驗了一番
>>> 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