簡體   English   中英

Python正則表達式模式匹配

[英]Python Regex pattern Matching

我有以下格式的列表:

data =['| test_data_14865428_0              |', '| test_data_1486612450_0              |', '| test_template                  |', '|id_1475020800_0              |']

我想將格式為test_data_ *的所有列表元素提取到一個新列表(表)中。 列表表應以test_data_ *格式存儲名稱

我的嘗試:

import re
tables = []
pattern = re.compile("| test_data\S")

for i in range(0, len(data)):
    if pattern.match(data[i]):
        tables.append(data[i])

print(list_of_tables)

由於所有數據都包含子字符串test_data_您可以過濾該靜態短語,而無需使用正則表達式:

data = filter(lambda v: 'test_data_' in v, data)

如果隨后要過濾出空格和管道分隔符,則可以使用translate刪除不需要的字符:

data = map(lambda v: v.translate(None, " |"), data)

當然,這些表達可以組合成復合表達。


上面原始代碼中的正則表達式存在的一個問題是| 需要轉義,以便將其按字面意義處理。 當前,它被視為備用運算符。

盡管可能不是最優雅的實現,但以下是一種選擇:

import re
pattern = re.compile("\| *(test_data_[\d_]+)")
def search(val):
    found = pattern.match(val)
    return found and found.group(1)
print(filter(lambda f: f, map(search, data)))

帶有身份映射的過濾器僅刪除不匹配的記錄。

使用filter選擇包含“ test_data_”的值,然后在這些值之間映射函數以清理字符串。 無需正則表達式。

import operator

td = map(lambda s: s[2:].split(' ', 1)[0], 
         filter(operator.methodcaller('startswith', '| test_data_'),
                data))
print(list(td))

暫無
暫無

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

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