2013-01-11 118 views
2

我已經做了一些搜索,但無法找到正確的正則表達式。RegEx計數數字,並允許特殊字符

我想要一個只包含數字,空格和加號的文本的正則表達式。 like:[0-9 +]

但是隻有該文本中數字的最小/最大限制。

我的建議,結束了這樣的事情:

^[0-9 \+](?=(.*[0-9]){5,8})$ 

應該確定:

  • 「123 456 7」
  • 「12345」
  • 「+ 123 456 78」

不應該沒問題:

  • 「123456789」
  • 「+ 124 578A」
  • 「+123456789」

任何人有可能做的伎倆的解決方案?

編輯:

我可以看到我是短於我的解釋是我的目標了。

我的正則表達式的條件應該是:

  • 必須包括數字5-8之間
  • 允許空格和加號
+1

你爲什麼不分兩步做?首先檢查它是否只包含所需的字符,然後對數字進行計數。 –

+0

我使用的服務只有一個字段的正則表達式條件。 :( – mannge

回答

1

我從自己的正則表達式的猜測,5和8之間允許在一行中沒有空格的數字。如果這是真的,那麼下面的正則表達式可能會做到這一點(用Python編寫的例子)。它允許單個數字組的長度在5到8位之間。如果有多個組,則允許每個組具有正好3個數字,除了最後一個組可以是1到3個數字之間。左側的一個加號是可選的。

你解析電話號碼嗎?:)

In [176]: regex = re.compile(r""" 
       ^    # start of string 
       (?: \+\s)?  # optional plus sign followed by whitespace 
       (?: 
        (?: \d{3}\s)+ # one or more groups of three digits followed by whitespace 
        \d{1,3}  # one group of between one and three digits 
        |    # ALTERNATIVE 
        \d{5,8}  # one group of between five and eight digits 
       ) 
       $     # end of string 
       """, flags=re.X) 

# --- MATCHES --- 
In [177]: regex.findall('123 456 7') 
Out[177]: ['123 456 7'] 

In [178]: regex.findall('12345') 
Out[178]: ['12345'] 

In [179]: regex.findall('+ 123 456 78') 
Out[179]: ['+ 123 456 78'] 

In [200]: regex.findall('12345678') 
Out[200]: ['12345678'] 

# --- NON-MATCHES --- 
In [180]: regex.findall('123456789') 
Out[180]: [] 

In [181]: regex.findall('+ 124 578a') 
Out[181]: [] 

In [182]: regex.findall('+123456789') 
Out[182]: [] 

In [198]: regex.findall('123') 
Out[198]: [] 

In [24]: regex.findall('1234 556') 
Out[24]: [] 
+0

您好,對不起,遲到的回答。 是的,我試圖解析的電話號碼。:) 我可以看到我是短於我的解釋是我的目標了。小組條件根本不需要。 我有一堆電話號碼。我的條件應該是: - 必須包括5-8位之間 - 可以包含空格和加號 – mannge

0

你是非常接近的 - 你需要超前錨定輸入的開始,並添加第二前瞻爲上限的數字的數量:

^(?=(.*\d){5,8})(?!(.*\d){9,})[\d +]+$ 

此外,僅供參考,你不需要逃避字符類中的加號,然後[0-9]\d

+0

不,既然你讓'*'在你的前瞻,也將匹配更長的號碼[Regexr(HTTP:// regexr.com?33ccr) – stema

+0

這與OP給出的任何示例都不匹配。 – pemistahl

+0

@stema終於想出瞭如何解決我的正則表達式。我在regexpal上測試了它,並且它通過了所有的例子給出了OP – Bohemian

0

你可以做這樣的事情:

^(?:[ +]*[0-9]){5}(?:(?:[ +]*[0-9])?){3}$ 

查看它here on Regexr

第一組(?:[ +]*[0-9]){5}是5個最低位,具有空間的任何量和加上之前,第二部分(?:(?:[ +]*[0-9])?){3}可選位數相匹配,具有空間的任何量和加上之前。

+0

我想OP想分析電話號碼。因此,任意數量的加號可能不正確。 – pemistahl

相關問題