簡體   English   中英

python字符串替換為\\u

[英]python string replace to \u

我有一個字符串。

m = 'I have two element. <U+2F3E> and <U+2F8F>'

我想替換為:

m = 'I have two element. \u2F3E and \u2F8F' # utf-8

我的代碼:

import re

p1 = re.compile('<U+\+') # start "<"
p2 = re.compile('>+')    # end   ">"
m = 'I have two element. <U+2F3E> and <U+2F8F>'

out = pattern.sub('\\u', m) # like: 'I have two element. \u2F3E> and \u2F8F>'

但我收到此錯誤消息:

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-1: truncated \uXXXX escape

我該如何解決。 謝謝。

import re

m = 'I have two element. <U+2F3E> and <U+2F8F>'

print(re.sub(r'<U\+(\w+)>', r"\\u\1", m))

# I have two element. \u2F3E and \u2F8F

您可以使用單個正則表達式來查找字符串並拉出要在替換中使用的部分。

您收到錯誤的原因是'\\\\u\u0026#39;將文字字符串\\u\u003c/code>傳遞給正則表達式引擎,該引擎嘗試將其解析為 Unicode 字符,但失敗了; \\u\u003c/code>需要緊跟四個十六進制數字以形成有效的 Unicode 代碼點。 但是你仍然在接近這個,好像你想用一個文字字符串替換,根據你的澄清評論是錯誤的。

import re

m = re.sub(r'<U\+([0-9a-fA-F]{4})>', lambda x: chr(int(x.group(1), 16)), m)

lambda接收匹配對象作為其參數; x.group(1)取出第一個帶括號的組, chr(int(that, 16))產生相應的文字字符。

如果你真的想產生它的 UTF-8 編碼,那也很容易:

>>> re.sub(r'<U\+([0-9a-fA-F]{4})>', lambda x: chr(int(x.group(1), 16)), 'I have two element. <U+2F3E> and <U+2F8F>')
'I have two element. ⼾ and ⾏'
>>> re.sub(r'<U\+([0-9a-fA-F]{4})>', lambda x: chr(int(x.group(1), 16)), 'I have two element. <U+2F3E> and <U+2F8F>').encode('utf-8')
b'I have two element. \xe2\xbc\xbe and \xe2\xbe\x8f'

如您所見,UTF-8 編碼是一個字節序列,根本不對應於可打印字符。 (好吧,它們可以用其他一些編碼打印;但那只是mojibake。)

m.replace('<U+', '\u')
m.replace('>',' ')

請使用下面的代碼,這可能會有所幫助

m = m.replace('<U+', '\\u').replace('>',' ')

暫無
暫無

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

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