RegEx用于提取域的首次出现

时间:2019-05-17 12:07:35

标签: regex regex-lookarounds regex-group

我在每行上都有这样的域列表

www.google.dk/

www.google.dk/

www.google.com/

www.google.de/

www.google.dk/

www.google.dk/

我只希望每个域都像这样第一次出现:

www.google.dk/

www.google.com/

www.google.de/

我到处都有类似的话题,但找不到适合我的东西。

3 个答案:

答案 0 :(得分:1)

尽管如此,应该使用代码轻松完成此类任务,就像我在上面的评论中所描述的那样,该代码将您所有的URL放入Set集合中,该集合将消除所有重复项,然后仅对{{ 1}}来获取您的唯一URL。

但是如果由于某些限制您需要一个纯正则表达式解决方案,那么您可以使用此正则表达式,

Set

仅捕获一次重复的URL,因为该URL本质上捕获了重复的URL中的最后一个字符串。

正则表达式说明

  • (\S+)(?![\w\W]*\1) -使用(\S+)捕获URL,因为URL自身不能包含空格
  • \S+-通过使用负向引用(?![\w\W]*\1)\1,该否定的前瞻确保了在group1中捕获的字符串不再在前面的任何位置可见,并且[\w\W]是匹配包括换行符在内的任何字符的一种方式,尽管您可以使用点来实现相同的功能,但是您需要启用DOTALL模式,方法是将(?s)放在正则表达式的开头,或者在支持的语言选择中传递一个额外的参数标志。

Regex Demo

答案 1 :(得分:0)

此RegEx应该适合您。

(?<= www。)[az.0-9] +(?= /)|(?<= https://)[az.0-9] +(?= /)|(?< = http://)[az.0-9] +(?= /)| ^ [az.0-9] +(?= /)

为解释起见,我将其分为几部分。

  1. 正向查找-(?<=)/(?<=“这是您要寻找的内容”)

  2. 在任何出现的情况下积极查找小写字母,点和数字[a-z.0-9] +

  3. 正向超前-(?=)/(?=“这就是您要寻找的东西”)

  4. 或-|

在后面寻找“ www”。 (?<= www。)

匹配“ www”之间任何出现的小写字母,点和数字。和“ /”
[a-z.0-9] +

提前查找“ /” (?= /)

或 |

在那之后,一切都是一样的,我只更改了后向的值

我希望我能帮上忙。

enter image description here

答案 2 :(得分:0)

如果它不是 first 匹配项,但也可以是 last 匹配项(即,您只需要唯一的域),则可以使用负数再次与匹配组一起前进。

([^\n]+)(?!.*\1)

(使用([^\n]+)来匹配一个域,因为每个域都在一行上;您也可以在此位置使用更复杂的域匹配正则表达式。)

Regex-101 Demo

www.google.dk/
www.google.dk/
www.google.com/  match
www.google.de/   match
www.google.dk/
www.google.dk/   match