首页 > 解决方案 > 正则表达式,我怎样才能忽略部分匹配?例如,当我对两个空格之间的单词进行正则表达式时,“.co”将匹配“.com”

问题描述

我正在尝试正则表达式并从大型文本文件中提取一些 URL。大多数 URL 没有附加 HTTP/HTTPS,因此这使得这变得更加困难。

如果我想对包含“.co”的 URL 进行正则表达式,我这样做是为了让正则表达式找到“.co”并从出现前的第一个空格和出现后的第一个空格中选择:

(\S+\.co\S+)

但是,当我在文件中也有带有 .com TLD 的 URL 时,就会出现问题。

例如,此正则表达式从下面选择所有 URL,而不仅仅是“.co” URL

pizza.com/test is good 
pizza.co/test is great

正则表达式提取:

pizza.com/test
pizza.co/test

我只希望它提取:

pizza.co/test

这是我的正则表达式示例: https ://regexr.com/5hl2h

有谁知道我可以用正则表达式实现这一目标的方法吗?还是我应该寻找替代解决方案?

非常感谢这里的帮助。

标签: regex

解决方案


你可以使用

\S+\.co(?!m)\S*

解释

  • \S+匹配 1+ 个非空白字符
  • \.co(?!m)匹配.co不直接跟在 m 之后
  • \S*匹配 0+ 个非空白字符也匹配以结尾.co

正则表达式演示


推荐阅读