我有一个网址列表,我正试图从中获取只是身份证号码。我正在尝试使用URLParse和正则表达式的组合来解决这个问题。我的函数是这样的:
def url_cleanup(url):
parsed_url = urlparse(url)
if parsed_url.query=="fref=ts":
return 'https://www.facebook.com/'+re.sub('/', '', parsed_url.path)
else:
qry = parsed_url.query
result = re.search('id=(.*)&fref=ts',qry)
return 'https://www.facebook.com/'+result.group(1)
但是,我觉得正则表达式result = re.search('id=(.*)&fref=ts',qry)
无法匹配下面示例中解释的一些url。你知道吗
#1
id=10001332443221607 #No match
#2
id=6383662222426&fref=ts #matched
我试图按照this答案中提供的建议来接受这个建议,将我的正则表达式重新表述为id=(.*).+?(?=&fref=ts)
,它在上面的示例中再次匹配#2而不是#1。你知道吗
我不知道我在这里错过了什么。任何建议/暗示都将不胜感激。你知道吗
你的正则表达式需要稍微调整一下。尝试:
id=(\d+)
匹配id=
后面的任意数字,(&fref=ts)?
允许以下字母组是可选的。这将允许您在必要时重新添加它们。你知道吗您还应该注意,如果找不到匹配项,这将引发一个错误-因此您可能需要稍微更改为:
你的正则表达式确实错了。你知道吗
使用表达式
id=(.*)&fref=ts
只能按字面匹配由&fref=ts
继承的id。你知道吗使用
id=(.*).+?(?=&fref=ts)
可以做同样的事情,但是使用lookahead,这是一个非捕获组表达式。这意味着你的匹配只会是id=blablabla
部分,但前提是它被&fref=ts
取代。你知道吗此外,
id=(.*)
将匹配由数字、字母、符号组成的ID。。。什么都可以。使用id=\d+
将匹配“仅数字”ID。你知道吗所以,试着用
它将允许您仅捕获数字,假设您的id始终是数字,并且仅捕获(使用括号)这些数字以供以后使用。你知道吗
有关更多参考,请参阅 http://www.regular-expressions.info/python.html
相关问题 更多 >
编程相关推荐