2015-10-09 50 views
0

使用正則表達式的字符串我有以下字符串:無法替換 XE2 X80 xa6 n Python中

data = "pizza won't divorce you pizza won't betray you pizza won't cheat on you pizza won't fight with you why don't people just \xe2\x80\xa6\n" 

,我想找到所有\[a-z][a-z][0-9]\(\ XE2 \ X80 \ xa6 \給出在data字符串的末尾),以便我可以替換它們。我嘗試了以下代碼:

re.findall(r"\\[a-z][a-z][0-9]\\+", data)

,但它產生一個空列表。請幫助。

+0

你可以添加什麼你的目標?你想要的究竟是什麼.. –

+0

我猜你的字符串中的「\ xe2 \ x80 \ xa6」是unicode - ['「\ u2026」''](http://www.fileformat.info/info/unicode /char/2026/index.htm) - '...'。 –

回答

2

如果您希望python會嘗試轉換unicode,您必須將字符串定義爲raw string

data = r"pizza won't divorce you pizza won't betray you pizza won't cheat on you pizza won't fight with you why don't people just \xe2\x80\xa6\n" 

print re.findall(r"\\[a-z][a-z]?[0-9]+", data) 

輸出:['\\xe2', '\\x80', '\\xa6']

+0

如果數據意外地具有用於Python字節串文字的字符轉義,那麼數據應該被固定在上游並首先轉換爲Unicode文本:'r「\ xe2 \ x80 \ xa6」.decode('string-escape')。decode ('utf-8')' – jfs

+0

@JFSebastian猜測OP只是希望得到一個列表'\ x' unicodes ...他不想轉換它或什麼 – vks

+1

OP可能不理解字節,Unicode字符串和它們的區別Python源代碼中的文本表示,但答案應該至少承認在Python中存在使用文本的更爲方便的方法。 – jfs

0

另一種解決方案:

print re.findall(r"\\[a-z]{1,2}\d{1,2}", data) 
0

要與文字工作,你應該使用Unicode字符串:b"\xe2\x80\xa6"字節字符串是UTF-8編碼u'…' (U+2026 HORIZONTAL ELLIPSIS)

text = u"pizza won't divorce\u2026" 

替換它:

no_ellipsis = text.replace(u"\u2026", "")