我試圖了解這段代碼的作用:
passwd1=re.sub(r'^.*? --', ' -- ', line)
password=passwd1[4:]
我知道頂行使用正則運算式洗掉“--”,而我認為底行也洗掉了一些東西?一段時間后我又回到了這段代碼,需要改進它,但要做到這一點,我需要再次理解這一點。我一直試圖閱讀正則運算式檔案無濟于事,這是什么:r'^.*? 在正則運算式的開頭?
uj5u.com熱心網友回復:
分解r'^.*? --成碎片:
r在 Python 中的字串前面讓解釋器知道它是一個正則運算式字串。這讓你不必做一堆令人困惑的字符轉義。- 告訴正
^則運算式僅從字串的開頭匹配。 .*?告訴正則運算式匹配任意數量的字符,最多...--,這是一個字面匹配。
總而言之,它將匹配任何字串,從一行的開頭到--分界線。既然是re.sub(),字串的匹配部分將被替換為--。
這就是為什么像Google -- MyPasswordbecome之類的東西 -- MyPassword。
第二行是一個簡單的字串切片,洗掉字串的前四個元素(字符)。這可能是多余的 - 你可以用一個空字串替換匹配,如下所示:
passwd1 = re.sub(r'^.* --', '', line)
這達到了相同的結果。請注意,我已經洗掉了?,這在這里也是多余的,因為*具有類似但更廣泛的效果。存在一些技術差異,但我認為您不需要它來達到您的既定目的。
?將匹配前一個字符的零個或一個 - 在本例中是 a .,即“任何字符”。將*匹配零個或多個前一個字符。.*是所謂的貪婪量詞和.*?惰性量詞。也就是貪婪的量詞會盡量匹配,而懶惰的量詞會盡量少匹配。^.*? --和之間的區別^.* -- 是在這種情況下匹配的內容:
Something something -- mypassword -- yourpassword
在貪婪的情況下,前兩個子句('something something -- mypassword')被匹配并洗掉。在惰性情況下,僅洗掉“某事某事”。大多數密碼不包含空格,沒關系'--',所以你可能想使用貪婪版本。
uj5u.com熱心網友回復:
您可以使用regex101 之類的網站來輸入您的正則運算式并對其進行一些分析。它會告訴你你的正則運算式是否匹配一些測驗用例,并解釋正則運算式中每個字符的含義。在這種情況下,它匹配字串中直到并包括第一個實體的所有內容' -- ',并僅用字符替換它' -- '。
第二行是切片字串。它需要一個子字串,跳過前四個字符,然后繼續到字串的末尾。
實際上,給定一個包含在其中' -- '某處的字串,這對行將獲取該子字串之后的所有內容。但是,如果在 then 中找不到該子字串,line則您將簡單地丟棄前四個字符。如果line少于四個字符,您將收到錯誤訊息。
uj5u.com熱心網友回復:
r表示正則運算式^表示以.表示任何字符(換行符除外)*表示零次或多次出現?表示零次或一次出現
換句話說,這意味著它匹配一個以確切字符數開頭的字串--。sub 替換與 匹配的那部分字串' -- '。
第二個命令只是設定一個變數,忽略新設定的字串的前 4 個字符' -- '。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/528912.html
下一篇:調整flex容器中的影像大小
