如何忽略括号之间的字符?

时间:2017-11-29 10:34:08

标签: python assert

实施例: 系统中的硬编码输入:

Welcome to work {sarah} have a great {monday}! 

我从api电话中得到的那个可能因星期几或名称示例而有所不同:

Welcome to work Roy have a great Tuesday!

我想比较这两行,如果除了括号中的术语之外的任何内容都不匹配,则会出错。

我开始的方式是使用assert这是我需要的确切函数,然后通过使用{.startswith()开头 DateTime startD; startD = Convert.ToDateTime(d); 来忽略一个句子,但我还没有成功地在我不希望他们检查的括号之间的具体方法中工作。

1 个答案:

答案 0 :(得分:1)

Regular expressions适合匹配文字。

使用正则表达式将模板转换为正则表达式,以匹配{}标记:

>>> import re

>>> template = 'Welcome to work {sarah} have a great {monday}!'

>>> pattern = re.sub('{[^}]*}', '(.*)', template)
>>> pattern
'Welcome to work (.*) have a great (.*)!'

要确保匹配在模式结尾处停止,请设置$

>>> pattern += '$'

然后将您的字符串与模式匹配:

>>> match = re.match(pattern, 'Welcome to work Roy have a great Tuesday!')
>>> match.groups()
('Roy', 'Tuesday')

如果您尝试匹配不匹配的字符串,则什么也得不到:

>>> match = re.match(pattern, 'I wandered lonely as a cloud')
>>> match is None
True

如果字符串的开头匹配但结尾不匹配,则$确保它不匹配。 $表示"在此结束":

>>> match = re.match(pattern, 'Welcome to work Roy have a great one! <ignored>')
>>> match is None
True

编辑:如果有人在玩傻傻的乞丐,你可能想要escape你的意见。