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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM