1. 程式人生 > 其它 >Python程式碼閱讀(第23篇):將變數名稱轉換為短橫線連線式命名風格

Python程式碼閱讀(第23篇):將變數名稱轉換為短橫線連線式命名風格

本篇閱讀的程式碼實現將變數名稱轉換為短橫線連線式命名風格(kebab case)的功能。 本篇閱讀的程式碼片段來自於30-seconds-of-python。

Python 程式碼閱讀合集介紹:為什麼不推薦Python初學者直接看專案原始碼

本篇閱讀的程式碼實現將變數名稱轉換為短橫線連線式命名風格(kebab case)的功能。

本篇閱讀的程式碼片段來自於30-seconds-of-python

kebab

from re import sub

def kebab(s):
  return '-'.join(
    sub(r"(\s|_|-)+"," ",
    sub(r"[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+",
    lambda mo: ' ' + mo.group(0).lower(), s)).split())

# EXAMPLES
kebab('camelCase') # 'camel-case'
kebab('some text') # 'some-text'
kebab('some-mixed_string With spaces_underscores-and-hyphens') # 'some-mixed-string-with-spaces-underscores-and-hyphens'
kebab('AllThe-small Things') # "all-the-small-things"

函式kebab接收一個字串,使用正則表示式將字串變形、分解成單詞,並加上-作為分隔符組合起來。

函式最內層的re.sub(pattern, repl, string, count=0, flags=0)函式使用正則表示式將字串中的單詞匹配出來。然後使用repl函式lambda mo: ' ' + mo.group(0).lower()來處理匹配到的單詞,將單詞用空格分開,並轉換成小寫。repl函式將匹配資訊作為mo傳入函式,mo.group(0)返回匹配到的字串。

第二層sub函式將各種空白字元、下劃線以及短橫線都先統一替換成空格。然後再將字串根據空格分割成單詞。

最後函式將分割出來的單詞使用短橫線'-'

連線起來,即可得到kebab case風格的命名字串。