簡體   English   中英

了解正面的前瞻性斷言

[英]Understanding Positive Look Ahead Assertion

從Python 3.4.1文檔:

(?= ...)

積極的前瞻性斷言。 如果包含的正則表達式(由...表示)在當前位置成功匹配,則成功,否則失敗。 但是,一旦嘗試了包含的表達式,匹配引擎將根本無法前進 模式的其余部分將在斷言開始的地方嘗試。

我正在嘗試了解Python中的正則表達式。 您能幫我理解第二句話,尤其是粗體字嗎? 任何示例將不勝感激。

環顧四周是零寬度的斷言。 他們不消耗字符串上的任何字符。

簡要觸摸文檔的粗體部分:

這意味着在向前看之后,正則表達式引擎從開始查找的位置回到字符串的相同位置。 從那里,它可以再次開始匹配...

關鍵點:

您可以獲得零寬度的匹配,該匹配不消耗任何字符。 它僅與字符串中的位置匹配。 零寬度點是一種驗證,以查看是否可以匹配正則表達式,或者不將它們添加到整體匹配中,就可以從當前位置向前或向后查找正則表達式。

通常,正則表達式引擎會與正則表達式匹配,逐字符“消耗”您的字符串字符。

如果使用先行運算符,則引擎將在查找匹配項時簡單地向前看而不會“消耗”任何字符。

一個很好的例子是一個正則表達式來匹配密碼,該密碼需要一個數字並且長度在6到20個字符之間。

您可以編寫兩項檢查(一項檢查數字是否存在,一項檢查字符串長度是否符合要求),或使用一個正則表達式:

(?=.*\d).{6,20}

第一部分(?=.*\\d)檢查字符串中是否有數字。 完成后,我們再次回到字符串的開頭(我們只是“向前看”),如果通過了,就進入正則表達式的下一部分。

現在.{6,20}不再是前瞻,而是開始使用該字符串。 當整個字符串消耗完后,將找到一個匹配項。

示例形式的答案。 在字符串"xy"

  • (?:x)將匹配"x"
  • (?:x)x將不匹配,因為x后面沒有其他x
  • (?:x)y將通過先於x然后y來匹配"xy"

  • (?=x)將在字符串的開頭匹配"" ,因為x緊隨其后。

  • (?=x)x將與"x"匹配-它識別出x跟隨其后,然后越過它。
  • (?=x)y將不匹配,因為它確定后面跟隨有x ,但隨后嘗試使用y超越它。

暫無
暫無

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

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