||/ software version some_text Description
-======================================-===================================================-============-===============================================================================
AA SOFTWARE1 1.1.1.1-UBUNTU GHGFHGFH Description1
AA SOFTWARE2 1.1.1.2-UBUNTU_HGSFHF JGJHGKGK Description2
BB SOFTWARE3 1.2.3.4.5 JHGJHGJG Description3
以上是存盤在字串中的示例文本格式。這可能有多達 1000 行。其中,需要提取軟體和相應的版本詳細資訊。
Approach1:基于新行拆分并根據空間拆分每一行并捕獲串列中的第二個和第三個專案(不是一個好方法)
方法2:使用正則運算式編譯和存盤它們。
我相信第二種方法很好。
regex = r".*(AA|BB)\s (.*)\s (.*)\s (.*)\s (.*)"
matches = re.finditer(regex, test_str, re.MULTILINE)
如何從每一行 grep 這些軟體和版本詳細資訊并將它們存盤在字典或任何其他格式中?
uj5u.com熱心網友回復:
如果您想要 2 個捕獲組,第 1 組中的軟體(可以包含空格)的值和第 2 組中的版本,您可以使用值之間空白字符數的差異(假設軟體不包含更多空白字符比欄位之間)
^(?:AA|BB)\s{2,}(\S.*?)\s{2,}(\S )
^字串的開始(?:AA|BB)匹配AA或BB在非捕獲組中\s{2,}匹配 2 個或更多空白字符(\S.*?)第 1 組捕獲單個非空白字符,后跟盡可能少的任何字符\s{2,}匹配 2 個或更多空白字符(\S )第 2 組,捕獲 1 個非空白字符
查看正則運算式演示。
如果要創建以組 1 為鍵、組 2 為值的字典:
import re
pattern = r"^(?:AA|BB)\s{2,}(\S.*?)\s{2,}(\S )"
s = ("||/ software version some_text Description\n"
" -======================================-===================================================-============-===============================================================================\n"
"AA SOFTWARE1 this is some text 1.1.1.1-UBUNTU GHGFHGFH Description1\n"
"AA SOFTWARE2 1.1.1.2-UBUNTU_HGSFHF JGJHGKGK Description2\n"
"BB SOFTWARE3 1.2.3.4.5 JHGJHGJG Description3")
dct = dict(re.findall(pattern, s, re.M))
print(dct)
輸出
{'SOFTWARE1 this is some text': '1.1.1.1-UBUNTU', 'SOFTWARE2': '1.1.1.2-UBUNTU_HGSFHF', 'SOFTWARE3': '1.2.3.4.5'}
您還可以使模式更加具體,匹配版本列的示例資料:
^(?:AA|BB)\s{2,}(\S.*?)\s{2,}(\d (?:\.\d )*(?:-\w )?)
正則運算式演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/416613.html
標籤:
上一篇:如何將react-nativeweb集成到現有的reactnative專案中
下一篇:從字串中提取方法呼叫
