Python程式碼閱讀(第23篇):將變數名稱轉換為短橫線連線式命名風格
阿新 • • 發佈:2021-10-26
本篇閱讀的程式碼實現將變數名稱轉換為短橫線連線式命名風格(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
風格的命名字串。