我有一个文本文件,其中包括不同的软件包(名称,id,当前版本,新版本,源代码)提取winget(winget升级)(我删除了前两行和最后一行)
文本文件的内容:
Brave Brave.Brave 111.1.49.120 111.1.49.128 winget
Git Git.Git 2.39.2 2.40.0 winget
Notepad++ (64-bit x64) Notepad++.Notepad++ 8.5 8.5.1 winget
Spotify Spotify.Spotify 1.2.7.1277.g2b3ce637 1.2.8.907.g36fbeacc winget
Teams Machine-Wide Installer Microsoft.Teams 1.5.0.30767 1.6.00.4472 winget
PDFsam Basic PDFsam.PDFsam 5.0.3.0 5.1.1.0 winget
我试图使用Python3过滤掉所有的包ID,因为winget upgrade的输出只是基于文本的。
到目前为止我已经尝试过:
import re
with open(r"C:\Users\Username\Desktop\winget_upgrade.txt", "r") as f:
for line in f:
match = re.search(r"\b([a-zA-Z]+[a-zA-Z0-9!@#$%^&*()+\-.]*\.[a-zA-Z]+[a-zA-Z0-9!@#$%^&*()+\-.]*\+*)\b", line)
if match:
print(match.group(1))
输出为:
Brave.Brave
Git.Git
Notepad++.Notepad
Spotify.Spotify
Microsoft.Teams
PDFsam.PDFsam
这里的问题是包记事本在末尾缺少两个+字符。我如何编辑我的正则表达式语法以成功显示:notepad++.notepad++
而不是notepad++.notepad
我想我必须在+过滤器上做些改变:()+\-.]*\+*)
但我不确定是什么。
你能帮帮我吗?
1条答案
按热度按时间6rqinv9w1#
问题是由
\b
引起的,因为从+
到空格的转换不是字边界。使用先行
(?=\s)
代替:输出: