簡體   English   中英

如何在Python中動態生成此代碼?

[英]How to generate this code dynamically in Python?

我有大量的數據列表和另一個模式列表。 我正在嘗試使用模式過濾數據。 這是使用一些示例數據的代碼:

dataList = [ '4334 marked val 5656 bin', 
    '76-67-34 done this 99', 
    'bin ket AZZ3R434 pid' 
]

for data in dataList:
    regexList = [ re.search(r'val ([\d]+) bin', data),
            re.search(r'bin ket ([A-Z\d-]+)\b', data)
        ]

    for reg in regexList:
        if reg:                   #If there's a match
            #...do something...
            break

在上面的正則表達式代碼中,“ re.search()”部分一次又一次地重復。 我只想保留模式列表,如下所示:

regexList = [ 'val ([\d]+) bin',
        'bin ket ([A-Z\d-]+)\b'
    ]

並在稍后與re.search()一一對應使用這些模式。 我嘗試同時使用eval()和exec(),但是一直出錯。

我也想知道是否在for循環下一次又一次創建了“ regexList”?

我不明白為什么您需要使用eval / exec來執行此操作。 只需將模式傳遞給循環內的re.search即可:

regexList = [
    r'val ([\d]+) bin',
    r'bin ket ([A-Z\d-]+)\b'
]
for pattern in regexList:
    if re.search(pattern, data):
        ...
dataList = [ '4334 marked val 5656 bin', 
    '76-67-34 done this 99', 
    'bin ket AZZ3R434 pid' 
]

regexList = [
         r'val ([\d]+) bin',
         r'bin ket ([A-Z\d-]+'
]
for data in dataList:
    for reg in regexList:
        if  re.search(reg,data):                   #If there's a match
            #...do something...
            break

我建議使用“路由器”(例如Dromeo ,我是作者),重點是路由器匹配模式並在模式匹配時執行操作,因此這正是您所需要的。

例:

import Dromeo

router = Dromeo()

router.on('4334 marked val {%INT%:val} bin', my_handler)

router.route('4334 marked val 5656 bin')

def my_handler( params ):
   # val is already typecasted to integer
   print(params['data']['val'])

暫無
暫無

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

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