我有一个字符串
url = '//item.taobao.com/item.htm?id\u003d528341191030\u0026ns\u003d1\u0026abbucket\u003d0#detail'
我想提取前两个528341191030
之间的数字\u
。我试过这个,
m = re.search('\?id\u\d+d(\d+?)\u', url)
if m:
print m.group(1)
但它不起作用。我的解决方案出了什么问题?
答案 0 :(得分:4)
您确定需要正则表达式吗? 以下是使用split的解决方案:
url.split("\u")[1].split("d")[-1]
'528341191030'
就你的正则表达式有什么问题而言," \"是一个特殊的角色,所以你应该使用" \\"反斜杠(所以" \\\ u"而不是" \ u"):
m = re.search('\?id\\\u\d+d(\d+?)\\\u', url)
if m:
print m.group(1)
捐赠:528341191030
Docs:
正则表达式使用反斜杠字符(' \')来表示 特殊形式或允许使用特殊字符 唤起他们的特殊意义。这与Python的使用相冲突 字符串文字中用于相同目的的相同字符;对于 例如,为了匹配文字反斜杠,可能需要编写' \\' 作为模式字符串,因为正则表达式必须是\,和 每个反斜杠必须表示为常规Python字符串中的\ 文字。
或者,使用 Raw String Notation
m = re.search(r"\?id\\u\d+d(\d+?)\\u", url)
if m:
print m.group(1)
答案 1 :(得分:0)
嗯,你总是可以尝试这个(不是超级优雅但有效):
first = url.find('\u') + 2
prev = 'u'
m = ""
for i in range(first, len(url)):
if prev == '\' and url[i] == 'u':
break
else:
m += url[i]
if url[i] == 'd':
m = ""
答案 2 :(得分:0)
更好的方法是分析并获取查询字符串值
url = '//item.taobao.com/item.htm?id\u003d528341191030\u0026ns\u003d1\u0026abbucket\u003d0#detail'
import urllib.parse as urlparse
print ( urlparse.parse_qs(urlparse.urlparse(url).query) )
print ( urlparse.parse_qs(urlparse.urlparse(url).query)['id'] )
输出:
{'id': ['528341191030'], 'ns': ['1'], 'abbucket': ['0']}
['528341191030']