如何用适当的unicode字符替换转义的unicode字符?

时间:2018-07-08 13:21:23

标签: python regex unicode

我有这样的字符串:

'https://www.jobtestprep.co.uk/media/24543/xnumber-series-big-1.png,qanchor\\u003dcenter,amode\\u003dcrop,awidth\\u003d473,aheight\\u003d352,arnd\\u003d131255524960000000.pagespeed.ic.YolXsWmhs0.png'

我需要用等效的未转义的 Unicode字符('\\uXXXX')替换任意的转义的unicode字符('\uXXXX')。我已经用Regex提取了所有必要的部分('\\uXXXX'的{​​{1}}部分和'XXXX'部分),但是我找不到用{替换正确的部分的方法{1}},因为Python会给出Unicode错误,并且需要预填充字符,例如re.sub()。使用原始字符串不起作用,因为\u{}只是转换回'\u003d',我们最终回到了开始的地方。

有没有办法做到这一点?如果您需要代码示例,可以在这里查看:

'\u{}'

'\\u{}'是返回结果的列表。列表中的一个项目示例就是上面给出的字符串。

2 个答案:

答案 0 :(得分:1)

您的正则表达式从网页中提取 JSON字符串

searched_results = re.findall(r"(?<=,\"ou\":\")[^\s]+[\w](?=\",\"ow\")", results_source)

您删除的"个字符实际上很重要。这里的\uxxxx转义语法特定于JSON(和Javascript)语法;它们与Python的使用密切相关,但又有所不同(虽然不多,但是在您具有非BMP代码点时就很重要)。

如果将引号保留在其中,则可以将它们解码为JSON

searched_results = map(json.loads, re.findall(r"(?<=,\"ou\":)\"[^\s]+[\w]\"(?=,\"ow\")", results_source))

更好的方法是使用HTML库来解析页面。使用BeautifulSoup时,您可以通过以下方式获取数据:

import json
from bs4 import BeautifulSoup

soup = BeautifulSoup(results_source, 'html.parser')
search_results = [json.loads(t.text)['ou'] for t in soup.select('.rg_meta')]

这会将每个<div class="rg_meta" ...>元素的文本内容作为JSON数据加载,并从每个结果字典中提取ou键。不需要正则表达式。

答案 1 :(得分:0)

您可以通过这种方式完成。

>>> url = (
...    'https://www.jobtestprep.co.uk/media/24543/xnumber-series-'
...    'big-1.png,qanchor\\u003dcenter,amode\\u003dcrop,awidth\\u003d473,'
...    'aheight\\u003d352,arnd\\u003d131255524960000000.pagespeed.ic.YolXsWmhs0.png'
... )
>>> url = url.encode('utf-8').decode('unicode_escape')
>>> print(url)
https://www.jobtestprep.co.uk/media/24543/xnumber-series-big-1.png,qanchor=center,amode
=crop,awidth=473,aheight=352,arnd=131255524960000000.pagespeed.ic.YolXsWmhs0.png
>>>