簡體   English   中英

Python正則表達式返回一組而不是兩組。 我在這里錯過了什么?

[英]Python regex returning one group instead of two. What am I missing here?

假設我有一個變量可以采用以下格式:

[+] Software in use: Calculator

或者,在某些情況下,顯示軟件版本號:

[+] Software in use: Calculator - v2.3

我試圖捕獲1)軟件名稱,2)如果提供,版本號。

這是我到目前為止所擁有的:

line = '[+] Software in use: Calculator - v2.3'
searchObj = re.search('\[\+\] Software in use: (.+)( - v(\d+.\d+))?', line)

searchObj.group(1)返回整個“計算器 - v2.3”為什么正則表達式不將它們分成組? searchObj.group(2)searchObj.group(3)不存在。 我認為括號表示一個捕獲組。 我忽略了什么嗎?

line = '[+] Software in use: Calculator - v2.3'
searchObj = re.search(r'\[\+\] Software in use: (.+?)(?:( - v(\d+.\d+))|$)', line)

                                                  ^^

讓它不貪心。參見演示。

https://regex101.com/r/eB8xU8/10

要么

\[\+\] Software in use: (.+?)( - v(\d+.\d+))?\b

見演示。

https://regex101.com/r/eB8xU8/11

所以正則表達式字符+*都是貪心的。 這意味着在嘗試未來的比賽之前,他們會盡可能地匹配。

在你的正則表達式中你使用(.+)( - v(\\d+.\\d+))? 第二個捕獲組將盡可能少地匹配,因為? 讓它變得懶惰(匹配盡可能少)。 將此與前一組貪婪相結合意味着第二組永遠不會匹配任何東西。

基本上,只是堅持一個? ,以下應該解決它

(.+)?( - v(\d+.\d+))? 

我希望我的解釋是有道理的

暫無
暫無

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

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