在Python中使用regex解析参数的语句字符串

2024-06-16 09:50:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有用户输入语句,我想分析这些语句的参数。如果可能,使用正则表达式。在

我读了很多关于functools.partial在Stackoverflow上找不到参数解析。同样在Stackoverflow上的regex中,我找不到如何检查匹配项,但排除了使用的标记。Python标记器对我来说似乎很重。在

import re

def getarguments(statement):      
    prog = re.compile("([(].*[)])")
    result = prog.search(statement) 
    m = result.group()  
    # m = '(interval=1, percpu=True)'
    # or m = "('/')"
    # strip the parentheses, ugly but it works
    return statement[result.start()+1:result.end()-1] 

stm = 'psutil.cpu_percent(interval=1, percpu=True)'
arg_list = getarguments(stm) 
print(arg_list) # returns : interval=1, percpu=True

# But combining single and double quotes like
stm = "psutil.disk_usage('/').percent"
arg_list = getarguments(stm) # in debug value is "'/'"   
print(arg_list) # when printed value is : '/'

callfunction = psutil.disk_usage
args = []
args.append(arg_list)
# args.append('/')
funct1 = functools.partial(callfunction, *args)
perc = funct1().percent
print(perc)  

这将导致错误: builtins.FILENOTFOUND错误:[Errno 2]没有此类文件或目录:“”“/”

但是

^{pr2}$

返回(对我来说)20.3这是正确的。 所以这是有区别的。在

奇怪的是,如果我在IDE(wingede)中查看内容,结果是“/”,然后,如果我想查看详细信息,那么结果是'/'

我使用python3.4.0,这里发生了什么,如何解决? 非常感谢你的帮助。在


Tags: true参数argargs语句resultlistpsutil
1条回答
网友
1楼 · 发布于 2024-06-16 09:50:15

getarguments("psutil.disk_usage('/').percent")返回'/'。例如,您可以通过打印len(arg_list)来检查这一点。在

IDE添加了",因为默认情况下字符串是用单引号'括起来的。现在有了一个实际包含'的字符串,因此IDE使用双引号来括住该字符串。在

注意,'/'不等于"'/'"。前者是1个字符的字符串,后者是3个字符的字符串。所以为了让事情正确,你需要去掉getarguments中的引号(包括双引号和单引号)。你可以用下面的片段来做

if (s.startswith('\'') and s.endswith('\'')) or 
        (s.startswith('\"') and s.endswith('\"')):
   s = s[1:-1]

相关问题 更多 >