正则表达式:更好地匹配单词中未知数量的字母

时间:2016-02-24 12:44:55

标签: python regex string

我使用正则表达式来匹配单个单词 - 使用特定顺序的字母 - 但是单词的长度未知。

我正在寻找更好的方法来执行以下操作...

例如......

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}...

很麻烦。

1 个答案:

答案 0 :(得分:3)

限制量词 {0,1}贪婪地匹配其量化的模式的一次或零次

等效量词是?。请参阅Quantifier Cheat Sheet

  

A?零或一A,如果可能的话,一个(贪婪),如果引擎需要回溯(温顺),就放弃角色

因此,您可以将{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