【发布时间】:2019-09-02 17:12:20
【问题描述】:
首先,我是正则表达式的初学者。我有一个看起来像这样的字符串:
my_folder/foo.xml::someextracontent
my_folder/foo.xml::someextracontent
another_folder/foo.xml::someextracontent
my_folder/bar.xml::someextracontent
my_folder/bar.xml::someextracontent
my_folder/hello.xml::someextracontent
我想返回属于my_folder 的唯一XML 文件。所以正则表达式将返回:
my_folder/foo.xml
my_folder/bar.xml
my_folder/hello.xml
我查看了Extract All Unique Lines,这与我需要的很接近,但我不确定从那里去哪里。
我得到的最接近的尝试是(?sm)(my_folder\/.*?.xml)(?=.*\1),它获取了所有重复项,但我想要相反,所以我尝试做一个否定的前瞻而不是(?sm)(my_folder\/.*?.xml)(?!.*\1),但捕获组完全错误。
我的正则表达式中缺少什么?这是正则表达式的链接:https://regex101.com/r/ggY2RB/1
【问题讨论】:
-
欢迎来到 SO!好问题,尽管使用
uniq或其他实用程序可能会更好地完成这样的任务。您愿意接受非正则表达式解决方案吗? -
感谢您的建议!不幸的是,这是在 java 中完成的,所以我不能这样做。我已经更新了标签以反映这一点。我只是想知道是否有只使用正则表达式的解决方案。否则我可以抓取所有文件名并将它们放入一个集合中
-
如果您使用的是 Java,只需使用
HashSet。我敢打赌它比正则表达式更快。