首页 > 解决方案 > 如果破折号在字符串内 n 次,则正则表达式匹配

问题描述

如果字符串包含破折号超过 3 次,我将尝试匹配该字符串:

string-has-4-dashes-example

正则表达式在此示例中不匹配:

string-has-3-dashes

不幸的是,这不起作用

.*-{3,}.*

我的目标是构建一个像这样的正则表达式:

\/germany\/.*-(\d{3,}\.html|\/product\/view\/id.*)$

这将匹配类似类型的 URL

https://www.test.de/germany/bla-blub-test-example-new-2-189.html

但不是:

https://www.test.de/germany/test-this-1931.html

标签: pythonregex

解决方案


您可以使用此正则表达式来匹配带有 3 个以上连字符的字符串:

^(?:[^-]*-){4}

正则表达式演示

正则表达式详细信息:

  • ^: 开始
  • (?::启动非捕获组
    • [^-]*-: 匹配 0+ 个非连字符后跟一个连字符
  • ):结束非捕获组。
  • {4}:匹配上述组的 4 个实例。

推荐阅读