python - 使用格式方法在 Python 中编辑正则表达式字符串
问题描述
.format()
我想在 Python 中开发一个正则表达式,其中模式的一个组件在一个单独的变量中定义,并使用 Python 的string 方法即时组合成一个字符串。一个简化的例子将有助于澄清。我有一系列字符串,其中单词之间的空格可以用空格、下划线、连字符等表示。例如:
new referral
new-referal
new - referal
new_referral
我可以定义一个正则表达式字符串来匹配这些可能性:
space_sep = '[\s\-_]+'
(连字符被转义以确保它不会被解释为定义字符范围。)
我现在可以使用以下方法构建一个更大的正则表达式来匹配上面的字符串:
myRegexStr = "new{spc}referral".format(spc = space_sep)
这种方法对我来说的好处是我需要定义许多相当复杂的正则表达式,其中可能有几个不同的常见问题,这些问题会以不可预知的顺序多次出现;预先定义常用模式使正则表达式更易于阅读,并允许非常轻松地编辑字符串。
但是,如果我想使用{m,n}
or{n}
结构定义其他字符的出现次数,就会出现问题。例如,为了允许在“referral”的拼写中出现常见的拼写错误,我需要允许出现 1 或 2 次字母“r”。我可以编辑myRegexStr
以下内容:
myRegexStr = "new{spc}refer{1,2}al".format(spc = space_sep)
但是,现在由于对花括号的使用感到困惑(无论是 aKeyError
的情况{1,2}
还是 的IndexError: tuple index out of range
情况下的 an {n}
),各种事情都会中断。
有没有办法使用.format()
字符串方法来构建更长的正则表达式,同时仍然能够使用定义字符的出现次数{n,m}
?
解决方案
{
您可以将and加倍}
来转义它们,或者您可以使用旧式字符串格式(%
运算符):
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
推荐阅读
- kubernetes-helm - 具有多个端口的 Helm 模板 kubernetes 服务
- python - 数据无法使用python在scrapy中检索多个类名
- node.js - 使用 Angular 从 Express 中捕获全局错误
- geolocation - 通过聊天机器人(dialogflow、twilio、whatsapp)检测设备位置
- excel - 将 2 个索引匹配的所有乘法相加
- django - Django -> 来自 context_proccesor 函数的 dict 访问模板
- python - 是否可以在 python 中放置中断单线三元条件运算符
- c# - List Add() 方法似乎在我的脚本中不起作用。我在 forach 循环中添加了一些元素后,列表中的元素数为 0
- css - 在 Outlook 中为 HTML 电子邮件签名添加边框间隙
- python-3.x - 使用 geopandas 读取具有多个文件夹的 KML 文件