如何在我的场景中获得正则表达式匹配

时间:2014-07-04 15:52:07

标签: python regex

我想匹配一个特定基本网址字符串后面有额外字符的网址。基地可以是' / home'或' / home / accounts / {numeric_account_id}'。我不需要捕捉任何比赛;我只想测试是否有匹配。

我做了一个正则表达式:

r'^/home(/accounts/\d+)?(/[A-Za-z0-9_\-]+)+/?$'

一些例子是:

  1. ' /家' =>
  2. 不应该匹配
  3. ' /家庭/' =>
  4. 不应该匹配
  5. ' /家庭/账户/ 123' =>
  6. 不应该匹配
  7. ' /家庭/账户/ 123 /' =>
  8. 不应该匹配
  9. ' /家庭/ X' =>应该匹配
  10. ' /家庭/帐户/ 123 / X' =>应该匹配
  11. 上面有我的正则表达式,它错误地匹配3&我试过改变“'?'在帐户分组到' *'之后,但这没有帮助。似乎最后一组贪婪地匹配案例3& 4。

    正确的正则表达式是什么?感谢

1 个答案:

答案 0 :(得分:2)

试试这个正则表达式:

^/home(?:(?!/accounts/)|/accounts/\d+)(?:/[A-Za-z0-9_\-]+)+/?$

它将匹配/home,然后是:

(?!/accounts/):下一个没有/accounts/的空字符串,或

/accounts/\d+/accounts/后跟数字。

之后,匹配路径中允许的任何字符。

regex101 demo