簡體   English   中英

在python中使用正則表達式解析語句字符串以獲取參數

[英]parse statement string for arguments using regex in Python

我有要解析的用戶輸入語句。 如果可能,使用正則表達式。

我在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,這是怎么回事,如何解決? 非常感謝您的幫助。

getarguments("psutil.disk_usage('/').percent")返回'/' 例如,您可以通過打印len(arg_list)進行檢查。

您的IDE會添加" ,因為默認情況下字符串被括在單引號' 。現在您有了一個實際上包含'的字符串,因此IDE使用雙引號將其括起來。

注意, '/'不等於"'/'" 前者是1個字符的字符串,后者是3個字符的字符串。 因此,為了正確處理,您需要在getargumentsgetarguments引號(雙引號和單引號)。 您可以按照以下代碼段進行操作

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM