Skip to main content
 首页 » 编程设计

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

2024年08月23日28EasonJim

我正在使用正则表达式匹配单个单词 - 字母按特定顺序排列 - 但单词长度未知。

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

例如……

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 one A, 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 方法一起使用,则^ 不是必需的。