我正在嘗試在條件陳述句中進行前瞻。文字解釋:
(specified string that has to be a number (decimal or not) or a word character, a named capturing group is created) (if the named capturing group is a word character then check if the next string is a number (decimal or not) with a lookahead else check if the next string is a word character with a lookahead)
為了理解,這里有一些匹配或不匹配的例子:
a 6或6.4 b-> 匹配,因為第一個和第二個字串的“型別”不同
ab 7or 7 rt-> 不匹配,只需要一個單詞字符
R 7.55t-> 不匹配,7.55t 不是有效數字
a ror 5 6-> 不匹配,第一個和第二個字串具有相同的“型別”(數字和數字,或者,單詞字符和單詞字符)
我已經找到了第一個字串的答案:(?P<var>([a-zA-Z]|(-?\d (.\d )?)))
我在 Internet 上找不到任何關于 Python 條件陳述句中的前瞻的資訊。
問題是 Python 不支持 PCRE 之類的條件陳述句:
Python 支持使用編號或命名的捕獲組的條件。Python 不支持使用環視的條件,即使 Python 確實支持條件外的環視。代替條件 like (?(?=regex)then|else),您可以交替使用兩個相反的外觀:(?=regex)then|(?!regex)else. (來源:https ://www.regular-expressions.info/conditional.html )
也許我已經計劃了一個更好的解決方案,或者也許只是不可能做我想做的事,我不知道。
我嘗試(?P<var>([a-zA-Z]|(-?\d (.\d )?))) (?(?=[a-zA-Z])(?=(-?\d (.\d )?))|(?=[a-zA-Z]))(?P=var)了什么:但這不起作用。
uj5u.com熱心網友回復:
命名的捕獲組(P<var>...)包含匹配的實際文本,而不是正則運算式本身。還有一種方法可以創建命名的正則運算式;但這在這里可能不是特別必要或有用。
簡單地說明替代方案:
((?<![a-zA-Z0-9])[a-zA-Z]\s -?\d (.\d )?(?![a-zA-Z.0-9])|(?<![a-zA-Z.0-9])-?\d (.\d )?\s [a-zA-Z](?![a-zA-Z0-9]))
如果您確實需要第二個令牌保持不匹配,那么如何將每個開始的部分更改\s為前瞻應該是顯而易見的。
演示:https ://ideone.com/nPNAIN
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/528909.html
標籤:Python正则表达式
上一篇:正則運算式模式不適用于2個字符?
