說我有一個數字:6278041121932517得到一個選擇的數字只有在前面加一個最小的X位
如果我想獲得11219325
我有一個正則表達式:
re.search(r"((1|2)\d{7})", "6278041121932517")
但事情是,它可能會以1或2開頭。所以我想預先添加一個最小緩衝區,即4位數。我想過後顧之憂,但它不支持n個長度。
說我有一個數字:6278041121932517得到一個選擇的數字只有在前面加一個最小的X位
如果我想獲得11219325
我有一個正則表達式:
re.search(r"((1|2)\d{7})", "6278041121932517")
但事情是,它可能會以1或2開頭。所以我想預先添加一個最小緩衝區,即4位數。我想過後顧之憂,但它不支持n個長度。
看來你可以使用
^\d{4,}?([12]\d{7})
詳細:
^
- 字符串的開始\d{4,}?
- 4位數以上,但作爲儘可能少的([12]\d{7})
- 第1組(你的價值):
[12]
- 1
或2
\d{7}
- 7位數import re
m = re.search(r"^\d{4,}?([12]\d{7})", "6278041121932517")
if m:
print(m.group(1))
# => 11219325
千恩萬謝,成就了正則表達式中的一小會兒所以我忘記了一下,會標記什麼時候可以。我之前也嘗試過'\ d {4,}',但我沒有問號,所以這也是失敗的地方。 –
如果所有你想要我是一個「緩衝區」,你甚至不需要爲此改變正則表達式。只要切掉幾個字符。
>>> import re
>>> re.search(r"((1|2)\d{7})", "6278041121932517").group()
'27804112'
>>> re.search(r"((1|2)\d{7})", "6278041121932517"[4:]).group()
'11219325'
這是真的,沒想到那個:\ \ –
* 4個字符* - 意味着您的案件中的任何字符或只有數字? – RomanPerekhrest
當預計不會出現重疊匹配時,您不需要積極lookbehind,捕獲幾乎總是足夠的。 –
@RomanPerekhrest是的這隻會在這種情況下數字 –