我在每行上都有这样的域列表
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/
我到处都有类似的话题,但找不到适合我的东西。
答案 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)
放在正则表达式的开头,或者在支持的语言选择中传递一个额外的参数标志。 答案 1 :(得分:0)
此RegEx应该适合您。
(?<= www。)[az.0-9] +(?= /)|(?<= https://)[az.0-9] +(?= /)|(?< = http://)[az.0-9] +(?= /)| ^ [az.0-9] +(?= /)
为解释起见,我将其分为几部分。
正向查找-(?<=)/(?<=“这是您要寻找的内容”)
在任何出现的情况下积极查找小写字母,点和数字[a-z.0-9] +
正向超前-(?=)/(?=“这就是您要寻找的东西”)
或-|
在后面寻找“ www”。 (?<= www。)
匹配“ www”之间任何出现的小写字母,点和数字。和“ /”
[a-z.0-9] +
提前查找“ /” (?= /)
或 |
在那之后,一切都是一样的,我只更改了后向的值
我希望我能帮上忙。
答案 2 :(得分:0)
如果它不是 first 匹配项,但也可以是 last 匹配项(即,您只需要唯一的域),则可以使用负数再次与匹配组一起前进。
([^\n]+)(?!.*\1)
(使用([^\n]+)
来匹配一个域,因为每个域都在一行上;您也可以在此位置使用更复杂的域匹配正则表达式。)
www.google.dk/
www.google.dk/
www.google.com/ match
www.google.de/ match
www.google.dk/
www.google.dk/ match