Python 重复“;{};为regex飞行
我正在尝试编写一个函数,将值与正则表达式进行比较,以查看是否匹配。问题是,我有相当多的正则表达式是相似的,只有一个差异,范围Python 重复“;{};为regex飞行,python,regex,Python,Regex,我正在尝试编写一个函数,将值与正则表达式进行比较,以查看是否匹配。问题是,我有相当多的正则表达式是相似的,只有一个差异,范围{}例如^[a-z]{0500}$&^[a-z]{0200}$是相似的正则表达式,只有范围/重复的差异。我试图用一个函数来解决如何处理这些正则表达式的问题。到目前为止,我已经编写了这个函数。但我认为一定有比我下面所做的更好的选择。如果没有指定最大值或最小值,它也应该能够处理 def check(value, min=None, max=None): regex =
{}
例如^[a-z]{0500}$
&^[a-z]{0200}$
是相似的正则表达式,只有范围/重复的差异。我试图用一个函数来解决如何处理这些正则表达式的问题。到目前为止,我已经编写了这个函数。但我认为一定有比我下面所做的更好的选择。如果没有指定最大值或最小值,它也应该能够处理
def check(value, min=None, max=None):
regex = "^[a-z]"+"{"+min+","+max+"}$"
r= re.compile(regex)
if r.match(value):
return True
else:
return False
改为使用min=“0”
和max=”“
(这样,如果未指定,它们将构造有效范围)
另外,如果条件为:return True等,则不要执行操作-只需返回match对象-如果存在匹配,它将计算为True
(如果愿意,您可以稍后使用它)
此外,如果只使用一次,则无需编译正则表达式
def check(value, min="0", max=""):
regex = "[a-z]{" + min + "," + max + "}$"
return re.match(regex, value)
另外,我删除了^
,因为它隐式存在于re.match()
中,使用min=“0”
和max=”“
(这样,如果未指定,它们将构造有效范围)
另外,如果条件为:return True
等,则不要执行操作-只需返回match对象-如果存在匹配,它将计算为True
(如果愿意,您可以稍后使用它)
此外,如果只使用一次,则无需编译正则表达式
def check(value, min="0", max=""):
regex = "[a-z]{" + min + "," + max + "}$"
return re.match(regex, value)
另外,我已经删除了^
,因为它隐含在re.match()
中,那么为什么不直接使用^[a-z]{0500}$
?用字符串构建RegExp总是感觉像用字符串连接构建SQL,这听起来非常可怕,但在您的特定情况下,这似乎是可以接受的(您不想/需要先使用str()
将最小值和最大值转换为字符串吗?)还有,为什么value
是一个可选参数?@BenjaminGruenbaum:这个值只是一个错误。我现在已经更正了。最小值和最大值已经作为字符串传递了。但是很好的一点是,它们应该在函数中铸造。@HamZaDzCyberDeV:因为它取决于特定类型,有些需要200最大值,有些需要500最大值@TimPietzcker:这是另一个错误。我想将值从可选更改为必需,但意外地删除了所有。我不知道我在想什么:(那么为什么不直接使用^[a-z]{0500}$
?使用字符串构建RegExp总是感觉像使用字符串连接构建SQL,这听起来非常可怕,但是在您的特定情况下,这似乎是可以接受的(您不想/需要先使用str()
将最小值和最大值转换为字符串吗?)还有,为什么value
是一个可选参数?@BenjaminGruenbaum:这个值只是一个错误。我现在已经更正了。最小值和最大值已经作为字符串传递了。但是很好的一点是,它们应该在函数中铸造。@HamZaDzCyberDeV:因为它取决于特定类型,有些需要200最大值,有些需要500最大值@TimPietzcker:这是另一个错误。我想将值从可选更改为必需,但意外地删除了所有。我不知道我在想什么:(谢谢你指出关于^的问题。因此,没有办法让事情变得更整洁。我想,re
可能有一些选择来处理这种情况。无论如何,谢谢你的帮助。@BenjaminGruenbaum:谢谢你提醒。我想我今天过得不好,忘记了很多事情。谢谢你指出关于^的问题。所以没有办法使自己更整洁。我想也许re
可以选择处理这种情况。无论如何,谢谢你的帮助。@BenjaminGruenbaum:谢谢你提醒我。我想我今天过得不好,忘记了很多事情。