Python3正規表示式之:(?(id/name)yes-pattern|no-
Python3正規表示式之:(?(id/name)yes-pattern|no-pattern)
條件性匹配
1. 用途
(?(id/name)yes-pattern|no-pattern)
的作用是:
對於給出的id
或者name
,先嚐試去匹配 yes-pattern
部分的內容;
如果id
或name
條件不滿足,則去匹配no-pattern
部分的內容;
這句話聽著還是很拗口的,或者說一下子還是很難懂的。
2. 引數含義
此處的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
,都是普通的正規表示式,用來匹配所需的內容。
3. 語法
如果存在no-pattern
,則前面要有個豎槓’|’,用來分隔yes-pattern
和no-pattern
如果不想匹配no-pattern
的部分,則可以連同'|'一起不寫。
例項:
1 |
|
其中的?(1)
代表序號為1的group
, 也就是上面(\d+)
, 第二個表示式中就沒有使用no-pattern
4. 用法詳解
還是上面的例子, 我們變換一下, 用例項探索它們的詳細用法及技巧
4.1 把(\d+)後面的問號去掉, 也就是說必須存在group 1,不是可有可無
執行:
1 2 |
|
整體規則匹配失敗,返回為空,no-pattern部分並沒有按照預想執行。
4.2 改一下匹配字串
1 |
|
可以匹配到, group1和yes部分都匹配到了
4.3 group可有可無的情況(group後增加問號)
1 2 |
|
如果group沒有匹配到,且它可有可無, 那麼group會被認為匹配不成功,繼續執行no-pattern部分匹配
4.4 只匹配group 1 部分, yes部分沒有匹配
1 |
|
只匹配group 1 部分, yes部分沒有匹配,也是有匹配結果的, 那說明yes-pattern和no-pattern不一定必須匹配成功
5.結論
1. 通過4.1 4.2 4.3 對比可以發現:
當該特殊規則中的作為判斷條件的組本身不允許為空的時候,在該組對目標字串匹配為空的情況下,整體規則匹配失敗,所以後面的作為整體一部分的特殊規則自然也就無效了。所以要想特殊規則的no-pattern
生效,必須判斷條件對應組匹配數可以為0。
2. 通過4.4可知:可以僅匹配group
部分, 如果yes-pattern
和no-pattern
沒有匹配到, 則會僅輸出group匹配的內容
相關文章
- Python3正規表示式之:(?(id/name)yes-pattern|no-pattern)條件性匹配Python
- Python3之正規表示式詳解Python
- 正規表示式(python3)Python
- Android 正規表示式Android
- python3的正規表示式(regex)Python
- python之正規表示式Python
- java正規表示式之 groupJava
- 正規表示式之字元組字元
- 正規表示式
- JS之正規表示式詳解JS
- 前端基礎之正規表示式前端
- 深入淺出之正規表示式
- php之正規表示式函式總結PHP函式
- 【正規表示式】常用的正規表示式(數字,漢字,字串,金額等的正規表示式)字串
- Python 之 RE(正規表示式)常用Python
- 《JavaScript 闖關記》之正規表示式JavaScript
- 正規表示式之(exp),(?:exp),(?=exp) 理解
- 開心檔之MySQL 正規表示式MySql
- 正規表示式之python實現Python
- 深入淺出之正規表示式(二)
- 深入淺出之正規表示式(一)
- Python基礎之正規表示式Python
- 【JavaScript】正規表示式JavaScript
- php –正規表示式PHP
- 正規表示式 教程
- 正規表示式 split()
- java正規表示式Java
- PHP正規表示式PHP
- javascript正規表示式JavaScript
- 【java】正規表示式Java
- 初探正規表示式
- [js]正規表示式JS
- js正規表示式JS
- javascript–正規表示式JavaScript
- ORACLE 正規表示式Oracle
- MySQL 正規表示式MySql
- oracle正規表示式Oracle
- js 正規表示式JS