[英]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.