2017-02-16 21 views
4

說我有一個數字:6278041121932517得到一個選擇的數字只有在前面加一個最小的X位

如果我想獲得11219325

我有一個正則表達式:

re.search(r"((1|2)\d{7})", "6278041121932517") 

但事情是,它可能會以1或2開頭。所以我想預先添加一個最小緩衝區,即4位數。我想過後顧之憂,但它不支持n個長度。

+0

* 4個字符* - 意味着您的案件中的任何字符或只有數字? – RomanPerekhrest

+0

當預計不會出現重疊匹配時,您不需要積極lookbehind,捕獲幾乎總是足夠的。 –

+0

@RomanPerekhrest是的這隻會在這種情況下數字 –

回答

5

看來你可以使用

^\d{4,}?([12]\d{7}) 

regex demo

詳細

  • ^ - 字符串的開始
  • \d{4,}? - 4位數以上,但作爲儘可能少的
  • ([12]\d{7}) - 第1組(你的價值):
    • [12] - 12
    • \d{7} - 7位數

Python demo

import re 
m = re.search(r"^\d{4,}?([12]\d{7})", "6278041121932517") 
if m: 
    print(m.group(1)) 
# => 11219325 
+0

千恩萬謝,成就了正則表達式中的一小會兒所以我忘記了一下,會標記什麼時候可以。我之前也嘗試過'\ d {4,}',但我沒有問號,所以這也是失敗的地方。 –

3

如果所有你想要我是一個「緩衝區」,你甚至不需要爲此改變正則表達式。只要切掉幾個字符。

>>> import re 
>>> re.search(r"((1|2)\d{7})", "6278041121932517").group() 
'27804112' 
>>> re.search(r"((1|2)\d{7})", "6278041121932517"[4:]).group() 
'11219325' 
+0

這是真的,沒想到那個:\ \ –

相關問題