本篇內容介紹了“如何理解Python3正則表達式(?(id/name)yes-pattern|no-pattern)條件性匹配”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
1. 用途
2. 參數含義
3. 語法
4. 用法詳解
4.1 把(\d+)后面的問號去掉, 也就是說必須存在group 1,不是可有可無
4.2 改一下匹配字符串
4.3 group可有可無的情況(group后增加問號)
4.4 只匹配group 1 部分, yes部分沒有匹配
5.結論
1. 通過4.1 4.2 4.3 對比可以發現:
2. 通過4.4可知:可以僅匹配group
部分, 如果yes-pattern
和no-pattern
沒有匹配到, 則會僅輸出group匹配的內容
(?(id/name)yes-pattern|no-pattern)
的作用是:
對于給出的
id
或者name
,先嘗試去匹配yes-pattern
部分的內容;如果
id
或name
條件不滿足,則去匹配no-pattern
部分的內容;
這句話聽著還是很拗口的,或者說一下子還是很難懂的。
此處的name或id,是針對(當前位置的)條件性匹配之前的,某個已經通過group去分組的內容
name
: 如果是有命名的分組,即named group
,則對應的該分組就有對應的name,即此處所指的就是對應的name;
id
: 如果是無命名的分組,即unnamed group
,則對應的該分組也有對應的分組的編號,稱為group的number,也叫做id,對應的就是這里的id;
yes-pattern
: 如果前面的group匹配成功,則此處,就執行yes-pattern的匹配;
no-pattern
: 如果前面group匹配不成功,即沒有找到符合該的group內容,則就匹配no-pattern;
注意: 上面的yes-pattern
和no-pattern
,都是普通的正則表達式,用來匹配所需的內容。
如果存在no-pattern
,則前面要有個豎杠'|',用來分隔yes-pattern
和no-pattern
如果不想匹配no-pattern
的部分,則可以連同'|'一起不寫。
實例:
>>> re.search(r'(\d+)?(?(1)\w+|jb51\.\w+)', 'jb51.com')>>> re.search(r'(\d+)?(?(1)\w+)', '100jb51')
其中的?(1)
代表序號為1的group
, 也就是上面(\d+)
, 第二個表達式中就沒有使用no-pattern
還是上面的例子, 我們變換一下, 用實例探索它們的詳細用法及技巧
執行:
>>> re.search(r'(\d+)(?(1)\w+|jb51\.\w+)', 'jb51.com') >>>
整體規則匹配失敗,返回為空,no-pattern部分并沒有按照預想執行。
>>> re.search(r'(\d+)(?(1)\w+|jb51\.\w+)', '1jb51.com')
可以匹配到, group1和yes部分都匹配到了
>>> re.search(r'(\d+)?(?(1)\w+|jb51\.\w+)', 'jb51') >>>
如果group沒有匹配到,且它可有可無, 那么group會被認為匹配不成功,繼續執行no-pattern部分匹配
>>> re.search(r'(\d+)(?(1)\w+|jb51\.\w+)', '1000')
只匹配group 1 部分, yes部分沒有匹配,也是有匹配結果的, 那說明yes-pattern和no-pattern不一定必須匹配成功
“如何理解Python3正則表達式(?(id/name)yes-pattern|no-pattern)條件性匹配”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。