使用format方法在Python中编辑正则表达式字符串

2024-06-26 13:48:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在Python中开发一个正则表达式,其中模式的一个组件在一个单独的变量中定义,并使用Python的.format()string方法动态组合成一个字符串。一个简化的例子将有助于澄清。我有一系列字符串,其中单词之间的空格可以用空格、下划线、连字符等表示。例如:

new referral
new-referal
new - referal
new_referral

我可以定义一个正则表达式字符串来匹配以下可能性:

space_sep = '[\s\-_]+'

(对连字符进行转义以确保它不会被解释为定义字符范围。)

我现在可以使用以下方法构建一个更大的正则表达式来匹配上面的字符串:

myRegexStr = "new{spc}referral".format(spc = space_sep)

对我来说,这种方法的优点是,我需要定义大量合理复杂的正则表达式,其中可能有多个不同的常见Sting,它们以不可预测的顺序多次出现;预先定义常用模式可以使正则表达式更易于阅读,并允许非常容易地编辑字符串

但是,如果要使用{m,n}{n}结构定义其他字符的出现次数,则会出现问题。例如,为了允许在“reference”的拼写中出现常见的拼写错误,我需要允许字母“r”出现1次或2次。我可以将myRegexStr编辑为以下内容:

myRegexStr = "new{spc}refer{1,2}al".format(spc = space_sep)

然而,由于对大括号使用的混乱,现在各种各样的事情都破裂了(在{1,2}的情况下是KeyError,在{n}的情况下是IndexError: tuple index out of range

有没有一种方法可以使用.format()string方法构建更长的正则表达式,同时仍然能够使用{n,m}定义字符的出现次数


Tags: 方法字符串formatnewstring定义模式space
1条回答
网友
1楼 · 发布于 2024-06-26 13:48:38

可以将{}加倍以转义它们,也可以使用旧式字符串格式(%运算符):

my_regex = "new{spc}refer{{1,2}}al".format(spc="hello")
my_regex_old_style = "new%(spc)srefer{1,2}al" % {"spc": "hello"}

print(my_regex)           # newhellorefer{1,2}al
print(my_regex_old_style) # newhellorefer{1,2}al

相关问题 更多 >