2013-12-17 74 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

相关问题