簡體   English   中英

如何從Python字符串中刪除unicode“標點符號”

[英]How to strip unicode “punctuation” from Python string

這是問題,我有一個unicode字符串作為python sqlite查詢的輸入。 查詢失敗('like')。 結果是字符串,'FRANCE'沒有6個字符,它有7個字符。 第七是。 unicode U + FEFF,零寬度不間斷空間。

我怎么在查詢之前捕獲一類這樣的東西呢?

您可以將unicodedata類別用作Python中unicode數據表的一部分:

>>> unicodedata.category(u'a')
'Ll'
>>> unicodedata.category(u'.')
'Po'
>>> unicodedata.category(u',')
'Po'

正如您所見,標點符號的類別以“P”開頭。 所以你需要通過char過濾掉char(使用列表推導)。

也可以看看:

在你的情況下:

>>> unicodedata.category(u'\ufeff')
'Cf'

因此,您可以根據字符的類別執行一些白名單。

通常,如果您可以為您的用例定義此類內容,則應使用允許字符的白名單來完成輸入驗證。 然后,您只需丟棄任何不在白名單上的內容(或完全拒絕輸入)。

如果您可以定義一組允許的字符,那么您可以使用正則表達式去除其他所有字符。

例如,假設您知道“country”將只有大寫的英文字母和空格,您可以刪除其他所有內容,包括您討厭的unicode字母,如下所示:

>>> import re
>>> country = u'FRANCE\ufeff'
>>> clean_pattern = re.compile(u'[^A-Z ]+')
>>> clean_pattern.sub('', country)
u'FRANCE'

如果你不能定義一組允許的字符,你就會陷入深深的麻煩,因為預測所有可能被拋出的數以萬計的意外unicode字符成為你的任務 - 並且越來越多的被添加到隨着語言的發展,這些規范多年來不斷發展。

這也是字節順序標記BOM。 首先清理你的字符串,以消除這些,使用類似的東西:


>>> f = u'France\ufeff'
>>> f
u'France\ufeff'
>>> print f
France
>>> f.replace(u'\ufeff', '')
u'France'
>>> f.strip(u'\ufeff')
u'France'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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