Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.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中的设置模式匹配?_Python_String_Pattern Matching - Fatal编程技术网

如何检查字符串是否与Python中的设置模式匹配?

如何检查字符串是否与Python中的设置模式匹配?,python,string,pattern-matching,Python,String,Pattern Matching,我希望将字符串与特定模式或一组单词匹配,如下所示: 苹果是红色的是查询 苹果|橙色|葡萄是红色|橙色|紫色是要匹配的图案。 管道代表的文字将相互替代。模式也可以分组为[launch app]|[start program]。当然,我希望模块返回True或False,无论查询是否与模式匹配 如果没有一个库已经做到了这一点,那么实现这一点的最佳方法是什么?如果这可以用简单的正则表达式实现,那就太好了;然而,我对正则表达式几乎一无所知。我正在使用Python 2.7.11 import re str

我希望将字符串与特定模式或一组单词匹配,如下所示:

苹果是红色的
是查询
苹果|橙色|葡萄是红色|橙色|紫色
是要匹配的图案。 管道代表的文字将相互替代。模式也可以分组为
[launch app]|[start program]
。当然,我希望模块返回True或False,无论查询是否与模式匹配

如果没有一个库已经做到了这一点,那么实现这一点的最佳方法是什么?如果这可以用简单的正则表达式实现,那就太好了;然而,我对正则表达式几乎一无所知。我正在使用Python 2.7.11

import re

string = 'the apple is red'

re.search(r'^the (apple|orange|grape) is (red|orange|violet)', string)
下面是it运行的一个示例:

In [20]: re.search(r'^the (apple|orange|grape) is (red|orange|violet)', string). groups()
Out[20]: ('apple', 'red')
如果没有匹配项,则
re.search()
将不返回任何内容

你可能“对正则表达式几乎一无所知”,但你几乎写下了这个模式

括号内的部分也可以有自己的正则表达式模式。所以你可以把“苹果”和“苹果”和


r'the(apple[s]*| orange | grape)

re
为此类问题提供的解决方案非常有效。但如果有一种简单的方法可以在Python中从字符串中提取数据,而不必学习正则表达式(或者再次学习正则表达式,因为我的大脑坏了,所以我总是不得不这样做),那就太好了

谢天谢地,我花了时间写了
解析

parse
对于这种事情。它在幕后使用正则表达式,但API基于,这是大多数Python用户已经熟悉的

对于要反复使用的格式规范,可以使用
parse.compile
。以下是一个例子:

>>> import parse
>>> theaisb_parser = parse.compile('the {} is {}')
>>> fruit, color = theaisb_parser.parse('the apple is red')
>>> print(fruit, color)
apple red
parmatter
我相信,万一别人觉得它有用。这会让事情变得更好一点。它大量使用
parse
。其思想是将一个
parse.Parser
组合成一个对象,我称之为
parmatter
(也是包名)

该包包含许多有用的自定义parmatter类型
StaticParmatter
有一个预编译的解析规范(类似于上面
parse.compile
中的对象)。像这样使用它:

>>> from parmatter import StaticParmatter
>>> theaisb = StaticParmatter('the {} is {}')
>>> print(theaisb.format('lizard', 'chartreuse'))
the lizard is chartreuse
>>> fruit, color = theaisb.unformat('the homynym is ogive')
>>> print(fruit, color)
homynym ogive
请注意,对于“非格式化”,parse
包使用方法名
parse
。但是,我的包使用了
unformat
。原因是
parmatter
类是从
string.Formatter
中派生出来的,而
string.Formatter
已经有了一个
.parse()
方法(它提供了不同的功能)。此外,无论如何,我认为
unformat
是一个更直观的方法名称


编辑:另请参见my,其中也讨论了这些包

好的,所以我可以使用它,如果它没有返回
None
则为真。
如果重新搜索(r“sleep(mode | computer)”,speech.lower()不是None:
是的,它工作了。非常感谢。