使用Reg Ex进行否定的环顾或否定的断言

时间:2019-01-22 09:17:36

标签: python regex python-3.x scrapy

我的网址格式始终以顶级网址后面的3个字之一开头:

word1
word2
word3

那么,在几个子目录中(最高可达4层)可能有任何东西,但总是: lowercasewordlowercaseword-lowercaseword

现在,我正在搜索一个正则表达式,它将与此完全匹配,但不是以下划线开头的子目录: _lowercaseword

所以我的网址是:

example.com/word1/lowercaseword/lowercaseword/?parameters
example.com/word2/lowercaseword/
example.com/word3/lowercaseword/lowercaseword/lowercaseword/
example.com/word2/lowercaseword/lowercaseword/_lowercaseword/

,我正在搜索一个与前三个匹配的正则​​表达式。

我想不出负面的看法(如果需要的话)。 有什么想法吗?

这些是我的表情,但是不能用:

\/(word1|word2|word3)\/((?!\_)[a-z]+(\-[a-z]+)?\/){0,4}
\/(word1|word2|word3)\/([!\_a-z]+(\-[a-z]+)?\/){0,4}

1 个答案:

答案 0 :(得分:1)

您可以使用

^[^/]+/(word1|word2|word3)(?:/[a-z]+(?:-[a-z]+)?){0,4}/?(?:\?.*)?$

请参见regex demo

详细信息

  • ^-字符串的开头
  • [^/]+-除/以外的1个以上的字符
  • /-斜杠
  • (word1|word2|word3)-任何单词
  • (?:/[a-z]+(?:-[a-z]+)?){0,4}-/的零到四个重复,1个小写ASCII 字母,然后是-和1+小写ASCII字母的可选序列
  • /?-可选的/
  • (?:\?.*)?-?的可选序列,然后是0到...之间的任意字符。
  • $-字符串的结尾。