我使用正则表达式来匹配单个单词 - 使用特定顺序的字母 - 但是单词的长度未知。
我正在寻找更好的方法来执行以下操作...
例如......
if re.match('^(patient)(s{0,1})(m{0,1}e{0,1}r{0,1}g{0,1}e{0,1})$', Var):print True
var =' patientmer'是真的 var =' patientmer'是真的 var =' patientmrg'是真的 var =' patientgmr'是假的 var =' patientsmrrge'是假的 var =' patientmerging'是假的
有些词很长,所以
?{0,1}?{0,1}...
很麻烦。
答案 0 :(得分:3)
限制量词 {0,1}
贪婪地匹配其量化的模式的一次或零次。
等效量词是?
。请参阅Quantifier Cheat Sheet:
A?
零或一A
,如果可能的话,一个(贪婪),如果引擎需要回溯(温顺),就放弃角色
因此,您可以将{0,1}
替换为?
以缩短模式。
^(patient)(s?)(m?e?r?g?e?)$
这里有一些sample code(感谢@zondo for his comment):
import re
term = 'patient'
pattern = '^({})(s?)({}?)$'.format(re.escape(term),"?".join("merge"))
print(pattern)
if re.match(pattern, 'patientmer'):
print('found')
注意如果您打算仅使用^
方法使用正则表达式,则不需要re.match
。