2013-12-17 73 views
-5

我需要一個正則表達式來匹配字符串,只要它至少包含X個字。正則表達式匹配字符串與最小字數

其中一個詞被定義爲任何連續的非空白序列。我正在使用re.findall()

+1

你嘗試過什麼嗎? – bgusach

+0

我似乎越來越災難性的回溯。 – eyaler

+1

對不起,但沒有任何企圖這看起來像「請做我的作業」 – bgusach

回答

3

嗯,你可以使用字符類\S+來指定一個單詞。

\S相當於[^\s]其本身相當於[^ \v\t\f\n\r](爲了我鍵入它們:空格,垂直製表符,水平製表符,進紙,換行,回車)。

[^ ... ]表示否定類,其中所有字符都將匹配,除了類內部的字符。現在

,你正在試圖做什麼,我寧願用re.match像這樣:

re.match(r'\s*\S+(?:\s+\S+){X-1,}', text_to_validate) 

(?:\s+\S+)比賽後跟一個字的空間(S)。

{X-1,}表示該組(?:\s+\S+)應該至少出現X-1次匹配。如果X = 4,則它變成{3,}

ideone demo


替代,分割上空間和計數元件的數目:

re.split(r"\s+", text_to_validate) 

ideone demo

+0

不是「0次或更多次」意味着您會匹配一串X個連續的非空白字符?你如何用re.findall來做到這一點? – eyaler

+0

@eyaler對不起,我編輯了正則表達式。我忽略了一件非常重要的事情。對於你的第一個問題,不,'\ S +'的存在迫使正則表達式匹配至少一個單詞。對於第二個問題,你可以使用相同的正則表達式。這只是你檢查'text_to_validate'是否通過的方式。 're.match'返回一個對象,'re.findall'返回一個列表。 – Jerry

+1

@eyaler不知道我提出的解決方案是否存在問題,但我在回答中添加了一個演示。 – Jerry

-2
import re 

subject = """I need a regex to match a string only if it contains at least X words. 
Where a word is defined as any continuous non-whitespace sequence. 
I am using Python 3 and re.findall()""" 

result = re.findall(r"([\S]+)", subject) 

if len(result) > 5: 
    print "yes" 
else: 
    print "no" 

http://labs.codecademy.com/

+0

findall應該匹配單個匹配中的整個字符串 – eyaler

相關問題