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

时间:2015-06-05 12:40:39

标签: python regex

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

我已经在Stackoverflow上阅读了很多关于functools.partial的内容,我找不到参数解析。另外在Stackoverflow的正则表达式中,我找不到如何检查匹配,但排除使用的标记。为了我的目的,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.FileNotFoundError:[Errno 2]没有这样的文件或目录:“'/'”

但是

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

返回(对我而言)20.3这是正确的。 所以有一些区别。

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

我使用Python 3.4.0这里发生了什么,以及如何解决? 非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

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

您的IDE会添加len(arg_list),因为默认字符串包含在单引号"中。现在你有一个实际包含'的字符串,因此IDE使用双引号括起字符串。

注意,'不等于'/'。前者是1个字符的字符串,后者是3个字符的字符串。因此,为了使事情正确,您需要在"'/'"中删除引号(包括双引号和单引号)。您可以使用以下代码段

执行此操作
getarguments