Python: re.IGNORECASE 標志參數字符串忽略大小寫的搜索替換


為了在文本操作時忽略大小寫,需要在使用re 模塊的時候給這些操作提供re.IGNORECASE 標志參數。比如


>>> text = 'UPPER PYTHON, lower python, Mixed Python'
>>> re.findall('python', text, flags=re.IGNORECASE)
['PYTHON', 'python', 'Python']
>>> re.sub('python', 'snake', text, flags=re.IGNORECASE)
'UPPER snake, lower snake, Mixed snake'
>>>


最后的那個例子揭示了一個小缺陷,替換字符串並不會自動跟被匹配字符串的大小寫保持一致。為了修復這個,你可能需要一個輔助函數,就像下面的這樣:
def matchcase(word):
  def replace(m):
    text = m.group()
    if text.isupper():
      return word.upper()
    elif text.islower():
      return word.lower()
    elif text[0].isupper():
      return word.capitalize()
    else:
      return word
  return replace

下面是使用上述函數的方法:
>>> re.sub('python', matchcase('snake'), text, flags=re.IGNORECASE)
'UPPER SNAKE, lower snake, Mixed Snake'
>>>


注: matchcase('snake') 返回了一個回調函數(參數必須是match 對象), sub() 函數除了接受替換字符串外,還能接受一個回調函數。


免責聲明!

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



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