gpt4 book ai didi

python - 尽管我使用了问号,但正则表达式匹配重复部分

转载 作者:行者123 更新时间:2023-12-04 08:56:37 26 4
gpt4 key购买 nike

我需要检查路径是否具有正确的名称,然后我创建了一个正则表达式,如下所示:

^\/2\d{3}(\/2\d{3}-(0[1-9]|1[0-2])(\/[a-z ]+(\/(g|o)(\/[a-z ]+(\/s)?)?)?)?)?$
它适用于正确的名称,但不幸的是,它也会匹配错误的名称,例如下一个: /2020/2020-05/test/o/test .最后 test无效我必须拒绝这条路。
正确路径示例:
  • /2020/2020-05/test/o
  • /2020/2020-05/test/o/s (最大,最后还没有)
  • /2020/2020-05/test
  • /2020/2020-05
  • /2020

  • 错误路径示例:
  • /2020/2020-05/test/o
  • /2020/2020/2020-05/test/o/smth
  • /2020/2020-05/test/test/o
  • /2020/2020-05/test/o/o/smth
  • 等等

  • 但据我所知,问号匹配零次或一次,所以我无法理解我的表达有什么问题。谁能给我解释一下,lz?
    附言我用 python 正则表达式,如果它很重要。

    最佳答案

    看来您错误地添加了最后一个可选组。你需要删除它:

    ^/2\d{3}(/2\d{3}-(0[1-9]|1[0-2])(/[a-z ]+(/[go](/s)?)?)?)?$
    或者,使用非捕获组以获得更好的性能:
    ^/2\d{3}(?:/2\d{3}-(?:0[1-9]|1[0-2])(?:/[a-z ]+(?:/[go](?:/s)?)?)?)?$
    regex demo .
    图案详情
  • ^ - 字符串开头
  • /2 - 一个 /2子串
  • \d{3} - 三位数
  • (?:/2\d{3}-(?:0[1-9]|1[0-2])(?:/[a-z ]+(?:/[go](?:/s)?)?)?)? - 一个可选的出现
  • /2\d{3}- - /2然后是任意三位数字
  • (?:0[1-9]|1[0-2]) - 要么 0然后是任何非零数字或 1其次是 0 , 12
  • (?:/[a-z ]+(?:/[go](?:/s)?)?)? - 一个可选的出现
  • /[a-z ]+ - /然后是一个或多个空格或小写 ASCII 字母
  • (?:/[go](?:/s)?)? - 一个可选的出现
  • /[go] - /go
  • (?:/s)? -- 可选出现 /s



  • $ - 字符串的结尾。
  • 关于python - 尽管我使用了问号,但正则表达式匹配重复部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63792125/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com