如何检查字符串是否与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:
是的,它工作了。非常感谢。