我有这样的字符串:
'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{}'
是返回结果的列表。列表中的一个项目示例就是上面给出的字符串。
答案 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
>>>