很久以前,我寫了一個工具,用于逐行決議文本檔案,并根據檔案中的命令和條件做一些事情。我為此使用了正則運算式,但是,我從來都不擅長正則運算式。
包含條件的行如下所示:
[type==STRING]
我使用的正則運算式是:
re.compile(r'^[^\[\]]*\[([^\]\[=]*)==([^\]\[=]*)\][^\]\[]*$', re.MULTILINE)
這個正則運算式會產生關鍵字“type”和值“STRING”。
但是,現在我需要更新我的工具以在一行中有更多條件,例如
[type==STRING][amount==0]
我需要更新我的正則運算式以獲得兩對結果,一對型別/字串和一對金額/0。但我迷失了這一點。我上面的正則運算式讓我用這條線得到零結果。
任何想法如何做到這一點?
uj5u.com熱心網友回復:
您可以匹配第二對組:
^[^\[\]]*\[([^\]\[=]*)==([^\]\[=]*)\][^\]\[]*(?:\[([^\]\[=]*)==([^\]\[=]*)\][^\]\[]*)?$
正則運算式演示
或者您可以省略錨點和[^\[\]]*部分以多次獲取 group1 和 group 2 值:
\[([^\]\[=]*)==([^\]\[=]*)\]
正則運算式演示
uj5u.com熱心網友回復:
您是否需要使用正則運算式?您也可以很容易地使用 split 函式兩次并剝離第一個左括號和最后一個右括號來完成此操作。
line_to_parse = "[type==STRING]"
# omit the first and last char before splitting
pairs = line_to_parse[1:-1].split("][")
for pair in pairs:
x, y = pair.split("==")
uj5u.com熱心網友回復:
而是取決于描述您的資料的精確“規則”。但是,對于您給定的資料,為什么不:
import re
text = '[type==STRING][amount==0]'
words = re.findall('\w ', text)
lst = []
for i in range(0, len(words), 2):
lst.append((words[i], words[i 1]))
print(lst)
輸出:
[('type', 'STRING'), ('amount', '0')]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/446028.html
