簡體   English   中英

如何將縮寫序數的大小寫更低,同時將標題的其余部分保留在標題大小寫中?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM