我正在使用正则表达式匹配单个单词 - 字母按特定顺序排列 - 但单词长度未知。
我正在寻找一种更好的方法来执行以下操作...
例如……
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 = 'patientsmer' 为真
var = 'patientmrg' 为真
var = 'patientgmr' 为假
var = 'patientsmrrge' 为 FALSE
var = 'patientsmerging' 为 FALSE
有些词变得很长,所以
?{0,1}?{0,1}...
很麻烦。
请您参考如下方法:
限制量词 {0,1} 贪婪地匹配它量化的模式的一次或零次出现。
等效量词是 ?。查看Quantifier Cheat Sheet :
A?Zero or oneA, one if possible (greedy), giving up the character if the engine needs to backtrack (docile)
因此,您可以将 {0,1} 替换为 ? 以缩短模式。
参见 what it looks like :
^(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 方法一起使用,则^ 不是必需的。
