【发布时间】:2022-01-19 11:33:34
【问题描述】:
我正在尝试从我正在处理的字符串中识别和替换 unicode 字符以制作关键字匹配过滤器。
例如,给定字符串
"Apple iPhone 12 mini A2176 128GB\u00a0(PRODUCT) Red!\u00a0Perfect condition! Unlocked!"
我希望使用 re.sub 函数时的输出(用空格“”替换模式)是
"Apple iPhone 12 mini A2176 128GB (PRODUCT) Red! Perfect condition! Unlocked!"
所以我去了一个正则表达式 build and test website 并想出了这个模式
\\u[a-z|0-9]{4}
捕获 2 个 unicode 字符串
\u00a0 and \u00a0
现在尝试将它应用到我的 python 代码中,我首先尝试了这个 sn-p。这里我使用findall函数来查看代码是否会返回unicode字符串
import re
strin = "Apple iPhone 12 mini A2176 128GB\u00a0(PRODUCT) Red!\u00a0Perfect condition! Unlocked!"
print(re.findall('\\u[a-z|0-9]{4}', strin))
导致以下错误返回
re.error: incomplete escape \u at position 0
然后我尝试在字符串模式前添加一个“r”。没有出现错误但是没有返回unicode字符串
print(re.findall(r'\\u[a-z|0-9]{4}', strin))
输出是一个空列表[]
然后我尝试了相同的 2 种方法,但只有 1 个反斜杠
print(re.findall('\u[a-z|0-9]{4}', strin)) 给SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-1: truncated \uXXXX escape
print(re.findall(r'\u[a-z|0-9]{4}', strin)) gives
re.error: incomplete escape \u at position 0
【问题讨论】:
-
\u00a0是一个不间断的空格。如果您只需要用常规 ASCII 空格替换不间断空格,请仅使用strin.replace('\u00a0', ' ')。 -
您对输入字符串感到困惑。它包含单个 Unicode 字符
\u00a0(也称为 NO-BREAK SPACE),而不是五个字符反斜杠、u、零、零、a、零。 -
@WiktorStribiżew 我的代码还必须处理其他 unicode 字符串,例如“\ud83d”