[英]How can i flip Case from upper to lower case and from lower to upper case in python3
[英]How can I change the case of abbreviated ordinals to lower while keeping the rest of the string in title case?
我正在使用python腳本將完整的大寫地址轉換為Title Case。 我現在面臨的問題是,當我申請.title()
像南大街16號的字符串,我得到南16 號街 。 期望的轉換將是South 16 th Street ,其中序數的縮寫是小寫的。
在python中實現此目的的簡單方法是什么? 我在考慮使用某種正則表達式。
為了解決你陳述的問題,我認為你可能會發現string.capwords()
很有用。 它將split - > capitalize - > join序列封裝到一個命令中。
>>> address = "SOUTH 16TH STREET"
>>> capwords(address)
'South 16th Street'
在Python 3.4中查看有關該命令的更多信息...
https://docs.python.org/3.4/library/string.html#string-functions
它也存在於早期版本的Python中。
但是,通常會擴大您的問題以解決格式問題,您可能會遇到這種簡單方法的問題。 可能需要更復雜(例如,基於正則表達式)的方法。 使用我的語言環境中的示例:
>>> address = "Highway 99N" # Wanting'Highway 99N'
>>> capwords(address)
'Hwy 99n'
地址解析(和格式化)是一個邪惡的問題,因為合法地址的變化量以及人們寫它們的不同方式(縮寫等)。
如果您不喜歡正則表達式方法,那么pyparsing模塊也可能是一種方法。
最簡單的方法是將字符串拆分為單獨的單詞列表,將每個單詞大寫,然后將它們連接在一起:
>>> address = "SOUTH 16TH STREET"
>>> " ".join([word.capitalize() for word in address.split()])
'South 16th Street'
capitalize()
方法將字符串的第一個字符設置為大寫,將前進字符設置為小寫。 由於數字不具有大寫/小寫形式,因此根據需要轉換“16TH”和類似的標記。
使用這個基於Regex的解決方案:
import re
convert = lambda s: " ".join([x.lower() if re.match("^\d+(ST|ND|RD|TH)$", x) is not None else x.title() for x in s.split()])
基本上,我拆分字符串並查看每個單詞是否是序數,然后應用適當的操作。
>>> str_='SOUTH 16TH STREET'
>>> ' '.join([i.title() if i.isalpha() else i.lower() for i in str_.split()])
'South 16th Street'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.