2017-04-11 691 views
2

我試圖做我的標題說。我有一個約3萬個企業地址列表,並且我正在儘可能使每個地址儘可能均勻。刪除python中的字符串中的特殊字符和符號

至於去除奇怪的符號和字符,我發現了三個建議,但我不明白他們是如何不同的。

如果有人可以解釋這種差異,或提供洞察到更好的方式來標準化地址信息,請和謝謝!

address = re.sub(r'([^\s\w]|_)+', '', address) 

address = re.sub('[^a-zA-Z0-9-_*.]', '', address) 

address = re.sub(r'[^\w]', ' ', address) 
+1

他們都做幾乎同樣的事情,在他們刪除的內容稍有不同。不知道你認爲什麼是不古怪的,很難給出任何建議。正則表達式howto會告訴你什麼是不同的類別:https://docs.python.org/2/howto/regex.html#regex-howto – thebjorn

+0

正則表達式的每個小組件都在這裏解釋(非常複雜,但可搜索! ):https://docs.python.org/2/library/re.html#regular-expression-syntax – JacobIRR

回答

1

第一個建議使用\s\w正則表達式通配符。

\s表示「匹配任何空格」。 \w表示「匹配任何字母或數字」。

這被用作反向捕獲組([^\s\w]),它們一起表示「匹配任何非空白,字母或數字」。最後,它使用替代|_進行組合,該替代將僅匹配下劃線並且給出匹配一次或多次的+量詞。

所以這是說:「匹配任何不是空格,字母,數字或下劃線的一個或多個字符的序列並將其刪除」。

第二個選項說:「匹配任何不是字母,數字,連字符,下劃線,圓點或星號的字符並將其刪除」。這是由那個大的捕獲小組(括號內的東西)說明的。

第三種選擇是「取出任何不是字母或數字並用空格替換的東西」。它使用通配符\w,我已經解釋過了。

所有的選項使用,以便匹配具有某些特徵的字符序列正則表達式,並且re.sub功能,這 -stitutes任何由第二字符串參數由給定正則表達式匹配。

你可以在Python here中閱讀關於Regular Expressions的更多信息。

0

你怎麼看re.sub功能是這樣的(more docs):

re.sub(a, b, my_string) # replace any matches of regex a with b in my_string 

我會與第二個去。正則表達式可能會很棘手,但這個說:

[^a-zA-Z0-9-_*.] # anything that's NOT a-z, A-Z, 0-9, -, * . 

這似乎就是你想要的。每當我使用正則表達式,我使用這個網站:

http://regexr.com/

你可以把你的一些投入,並確保他們在你的代碼投擲他們之前,選配合適的各種各樣的事情!

1

枚舉[^a-zA-Z0-9-_*.]正好枚舉要刪除的字符範圍(儘管文字-應位於字符類的開始或結尾處)。

\w被定義爲「字字符」,這在傳統的ASCII語言環境包括AZ和AZ以及數字和下劃線,但與支持Unicode,它重音字符相匹配,Cyrillics,日本表意文字等

\s匹配空格字符,這再次與Unicode包括一些擴展字符,如不可破壞的空間,數字空間等。

究竟要選擇哪一個顯然取決於你想要完成什麼和你的意思是「特殊的字符」。數字是 「符號」,所有的字符是 「特殊」 等

下面是the Python re documentation一個相關報價:

\ S

對於Unicode(STR)模式:

匹配Unicode空格字符(其中包括[ \t\n\r\f\v],還有許多其他字符,例如人的排版規則強制的非空格空格y語言)。如果使用ASCII標誌,則只匹配[ \t\n\r\f\v](但該標誌影響整個正則表達式,因此在這種情況下使用明確的[ \t\n\r\f\v]可能是更好的選擇)。

對於8位(字節)模式:

考慮空白ASCII字符集匹配的字符;這相當於[ \t\n\r\f\v]

\ W

對於Unicode(STR)模式:

匹配的Unicode字符字;這包括大多數可以是任何語言的單詞的一部分的字符,以及數字和下劃線。如果使用ASCII標誌,則只匹配[a-zA-Z0-9_](但標誌會影響整個正則表達式,因此在這種情況下使用明確的[a-zA-Z0-9_]可能是更好的選擇)。

對於8位(字節)模式:

認爲字母數字的ASCII字符集匹配的字符;這相當於[a-zA-Z0-9_]

+0

如果「地址」是一個電子郵件地址,則會截斷某些有效字符。如果你是垃圾郵件發送者,那是件好事。 – tripleee

相關問題