当我从CSV文件读取带有超链接的单元格时,我得到以下信息:
=HYPERLINK("http://google.com","google") #for example
有没有一种方法可以只提取"google"
而没有=hyperlink
和链接?
答案 0 :(得分:0)
根据@martineau的评论,您有HYPERLINK
的两个版本。
>>> s1 = '=HYPERLINK("http://google.com","google")'
或
>>> s2 = '=HYPERLINK("http://google.com")'
您可以split
,使用正则表达式,但是这些方法比较棘手(如果URL中有逗号,名称中是否有转义引号,该怎么办?)。
有一个名为ast
的模块,用于解析Python表达式。我们可以使用它,因为Excel函数调用语法与Python相似。这是一个返回友好名称的版本,如果存在则返回URL:
>>> import ast
>>> ast.parse(s1[1:]).body[0].value.args[-1].s
'google'
并且:
>>> ast.parse(s2[1:]).body[0].value.args[-1].s
'http://google.com'
它是这样工作的:s1[1:]
删除了=
符号。然后我们取表达式的值:
>>> v = ast.parse(s1[1:]).body[0].value
>>> v
<_ast.Call object at ...>
很容易提取函数名称:
>>> v.func.id
'HYPERLINK'
还有参数:
>>> [arg.s for arg in v.args]
['http://google.com', 'google']
只要有最后一个arg(....args[-1].s) to get the friendly name if it exists, and the url else. You can also check
len(args)`,如果有一个arg则执行某些操作,如果有两个args则执行其他操作。