正则表达式:避免使用group-url域名

时间:2018-02-01 14:59:02

标签: regex python-3.x conditional

我为re模块写了这个正则表达式,据我所知,它按预期工作:

^(https?://)([\w\.-]+)[\./]*(?(1)(domain-name.com))

针对网址列表运行,它仅匹配包含 domain-name.com 的网址。但我不明白为什么:

^(https?://)([\w\.-]+)[\./]*(?(1)(!(domain-name.com)))

不会返回所有其他网址。实际上它永远不会匹配任何东西。

谢谢

on pythex

2 个答案:

答案 0 :(得分:1)

匹配domain-name.com

要匹配domain-name.com个域名,请使用以下内容。

See regex in use here

^https?://(?:\w+(?:-\w+)*\.)*domain-name\.com(?=$|/)
  • ^在行首处断言位置
  • https?匹配httphttpss是可选的)
  • ://按字面意思匹配
  • (?:\w+(?:-\w+)*\.)*匹配任意数量的子域。子域名不能以-开头或结尾,因此此子模式执行如下操作:
    • \w+匹配一个或多个单词字符
    • (?:-\w+)*符合以下任意次数
      • -按字面意思匹配
      • \w+匹配一个或多个单词字符
    • \.字面匹配点字符
  • domain-name\.com按字面意思匹配domain-name.com
  • (?=$|[/?#])肯定前瞻性,确保行尾{或/?#中的字符

匹配nondomain-name.com

要匹配非domain-name.com域,请使用以下内容。

See regex in use here

^https?://(?:\w+(?:-\w+)*\.)*(?!domain-name\.com)[\w-]+\.[\w-]+(?=$|/)

除了使用(?!domain-name\.com)[\w-]+\.[\w-]+之外,这与第一个模式相同。这与任何字面上不匹配domain-name.com的域匹配

答案 1 :(得分:0)

你需要使用负向前瞻?!而不是!

^(https?://)([\w\.-]+)[\./]*(?(1)(?!(domain-name.com)))