我有一个字符串,其中所有unicode字符均已替换为其整数值并括在方括号中。例如,é被替换为[233]。我想将这些整数转换回unicode字符(显然要除去括号)。我认为最简单的方法是使用简单的正则表达式替换(使用re
库),但是出现错误。
这是一个不起作用的简单示例:
s = 'Som[233] string'
re.sub(r'\[(\d+)\]', chr(int(r'\1')), s)
这将返回错误:
ValueError:以10为底的int()无效文字:'\\ 1'
请注意,我使用this相关问题的解决方案也得到了同样的结果。
该错误表明字符串\\1
被传递给int()
而不是实际的捕获组。
如果repl是一个函数,则每次不重叠时都会调用它 模式的发生。该函数采用单个匹配对象 参数,并返回替换字符串。
因此,我按照文档中的示例尝试了此操作:
def replace(match):
return chr(int(match.group(0)))
re.sub(r'\[(\d+)\]', replace, s)
但这会返回类似的错误:
ValueError:以10为底的int()无效文字:'[233]'
我在这里想念什么?为什么将列表传递给函数而不是捕获组?
答案 0 :(得分:0)
上面的功能可以正常工作。第二个警告中的括号不是因为正在返回列表,而是因为捕获组0包括 entire 组,而不仅仅是数字:
re.search(r'\[(\d+)\]', s).group(0)
# '[233]'
re.search(r'\[(\d+)\]', s).group(1)
# '233'
因此解决方案只是更改函数中使用的组:
def replace(match):
return chr(int(match.group(1)))