Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式:检查一个字符串在包含至少3个单词的引号之间是否有子字符串(用空格分隔)_Python_Regex - Fatal编程技术网

Python 正则表达式:检查一个字符串在包含至少3个单词的引号之间是否有子字符串(用空格分隔)

Python 正则表达式:检查一个字符串在包含至少3个单词的引号之间是否有子字符串(用空格分隔),python,regex,Python,Regex,我正试图构造一个正则表达式,以便在具有以下约束的python程序中使用 检查引号中是否有任何子字符串,其中至少有3个单词由空格分隔。 下面是一些例子 "Hello word \"Foo bat baz kay \" exit" 这应该返回true,因为它包含子字符串Foo-bar-baz-kay,在引号子字符串中至少有3个单词 " Hello hello \" world \" exit" 应该返回false 根

我正试图构造一个正则表达式,以便在具有以下约束的python程序中使用

检查引号中是否有任何子字符串,其中至少有3个单词由空格分隔。 下面是一些例子

"Hello word \"Foo bat baz kay \" exit"
这应该返回true,因为它包含子字符串Foo-bar-baz-kay,在引号子字符串中至少有3个单词

" Hello hello \" world \" exit"
应该返回false

根据一些调查,我能把这个问题分成两部分

找到一个正则表达式来获取引号中的所有子字符串,比如

关于findallr'.*?',s

查找正则表达式以获取包含多个单词的所有字符串

^\s*[A-Za-z0-9]+?:\s+[A-Za-z0-9]+\s$

我试着把它们放在一起,但没有达到预期的效果。 对不起,我是新来的正则表达式,所以我可能没有这样做的权利。这是部分代码。 这些想法是从以下文章中整理出来的


请告知。谢谢你的帮助

像这样的方法应该会奏效:

进口稀土 def有“u quotetext,word”u count“u threshold=3: quoted\u string\u pattern=re.compiler'\.*?\' word_pattern=re.编译器'[a-zA-Z]+' 对于quoted_string_pattern.findalltext中的quoted_字符串: word\u count=sumboolword\u pattern.searchword for word in quoted\u string.split 如果单词计数>=单词计数阈值: 返回真值 返回错误 示例=[ 你好word\Foo bat baz kay\exit, 您好\world\exit, 一些带引号的字符串:\Hello world\和第二个引号\Hello world\done, 一些带引号的字符串:Hello world和\second,quote,Hello,world\done, 一些带引号的字符串:Hello world和\second\1233\done, 你好你好\世界酒吧\退出 ] 对于示例中的文本: 打印 printf'text:{text!r}' printf'has quote:{hasquoteText}'
到目前为止你尝试了什么?结果如何?谢谢你的回复。我用正则表达式和部分代码添加了我的天真尝试。试试这个:r'?:\s*\b\w+\b\s*{3,}。谢谢你的回答!这似乎是可行的,但是在这个测试用例上失败了:s=一些带引号的字符串:\Hello\和另一个引号是\Hello world\done。当我做findAll时,它将返回['另一个引号是']。但是它不应该返回任何东西。有点困惑,因为第一组引号以Hello结尾,第二组引号以Hello开头world@RahulPatwa您特别要求检查引号中是否有任何子字符串,其中至少有3个单词由空格分隔。子字符串和另一个引号符合这些要求,因此输出是正确的。这表明您的问题描述不明确和/或未指定。举一个简单的例子:“abcxyz”中有多少有效的子字符串?根据你的看法,说出1、2、3或0中的任何一个都同样正确。谢谢你的回答。这不适用于输入带引号的字符串:\Hello world\和第二个引号\Hello world\done。它也在计算QUPTE中的原始字符串吗?Woops..你是对的。带引号的非单词字符的子字符串呢?你希望正则表达式做什么:Hello word\get money$race\to exitOr Test example\foo,bar,baz\x y z\@Kapocsi是的,这很有效。非常感谢您在这方面的帮助!
s = "Some string with quotes : \"Hello world example\" and another quote is \" hello world\" done"
print(re.findall(r'"(^\s*[A-Za-z0-9]+(?:\s+[A-Za-z0-9]+)*\s*$)"', s))