Python regex:string不包含“jpg”,必须有“-”和小写

2024-05-15 13:40:23 发布

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

我很难为django url找到python正则表达式。我有一定的标准,但似乎无法想出神奇的公式。最后,我可以识别哪个页面是CMS页面,并将它应该加载的别名url传递给django函数。

下面是一些匹配的有效字符串示例:

  • 关于我们
  • 联系我们
  • 条款和条件
  • 信息/学习-更多-pg2
  • 信息/我的示例url

标准:

  • 必须全部小写
  • 必须包含短划线“-”
  • 可以包含数字、字母和斜线“/”
  • 必须至少4个字符长,最多30个字符
  • 不能包含特殊字符
  • 不能包含以下文字:
    • .jpg公司
    • .gif文件
    • .png格式
    • .css文件
    • .js公司

不应匹配的示例:

  • 关于我们(有大写字母)
  • 联系人(没有破折号)
  • pg(少于4个字符)
  • img/bg.gif(包含“.gif”)
  • files/my-styles.css(包含“.css”)
  • my page@(除字母、数字、短划线或斜线外还有其他字符)

我知道这还不算接近,但这是我所能得到的:

(?P<alias>([a-z/-]{4,30}))

我很抱歉有很大的要求,但我只是不能让我的头缠在这个正则表达式的东西。

谢谢!


Tags: 文件django信息url示例标准字母公司
2条回答

我很困惑为什么一些评论员发现在regex中很难做到这一点。这正是正则表达式所擅长的。

if re.match(
    r"""^             # match start of the string
    (?=.*-)           # assert that there is a dash
    (?!.*\.(?:jpg|gif|png|css|js))  # assert that these words can't be matched
    [a-z0-9/-]{4,30}  # match 4-30 of the allowed characters
    $                 # match the end of the string""", 
    subject, re.VERBOSE):
    # Successful match at the start of the string
else:
    # Match attempt failed

但是,由于.不在允许的字符中,因此实际上不需要检查禁止的文件扩展名。

这是我的第一篇文章。 如果需要,请随时纠正我的英语。

我认为以下任何一项都是正确的:

'(?=.{4,30}\Z)(?=.*-)[-a-z0-9/]+\Z'

'(?=.{4,30}\Z)[a-z0-9/]\*-[-a-z0-9/]\*\Z'

'(?=.{4,30}\Z)(?:[a-z0-9/]+|)-[-a-z0-9/]*\Z'

相关问题 更多 >