[英]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
見演示。
所以正則表達式字符+
和*
都是貪心的。 這意味着在嘗試未來的比賽之前,他們會盡可能地匹配。
在你的正則表達式中你使用(.+)( - v(\\d+.\\d+))?
。 第二個捕獲組將盡可能少地匹配,因為?
讓它變得懶惰(匹配盡可能少)。 將此與前一組貪婪相結合意味着第二組永遠不會匹配任何東西。
基本上,只是堅持一個?
,以下應該解決它
(.+)?( - v(\d+.\d+))?
我希望我的解釋是有道理的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.