我使用Html-Agility-Pack
从某些网站中提取信息。在此过程中,我以string
的形式获取数据,并在程序中使用该数据。
有时,我获得的数据包含单个string
中的多个详细信息。正如这部电影的名字" Dog Eats Dog(2012)(2012)" 。该名称应该是" Dog Eats Dog(2012)" 而不是第一个。
以上是许多人的一个例子。为了解决问题,我尝试使用string.Distinct()
方法,但它会删除string
中的所有重复字符,如上例所示,它会返回" Dog Eats(2012) " 即可。现在它通过删除第二个(2012)解决了我的初始问题,但通过更改实际标题创建了一个新问题。
我认为我的问题可以通过Regex
来解决,但我不知道如何在这里使用它。据我所知,如果我使用Regex
,它会告诉我string
根据定义的Regex
代码存在重复的项目。
但我如何删除它?可以有string
喜欢" Meme 2013(2013)(2013)"。
现在实际的标题是" Meme 2013"与年份(2013年)和重复年份(2013年)。即使我得到bool
值表明string
有重复年份,我也无法想到任何方法来实际删除重复的substring
。
重复的年份总是在string
的末尾。那么我应该使用Regex
来确定该字符串实际上有两年,如(2012)(2012)?
如果我能够正确识别string
包含重复内容,我可以使用string.LastIndexOf()
尝试删除重复的部分。如果有更好的方法,请告诉我。
感谢。
答案 0 :(得分:1)
正确的正则表达式为"( \(\d{4}\))\1+"
。
string pattern = @"( \(\d{4}\))\1+";
new Regex(pattern).Replace(s, "$1");
说明:
捕获一个" (DDDD)"阻止,并删除所有以下相同的
( \(\d{4}\))
执行捕获,\1+
找到捕获块的任何非空序列
最后,仅用初始块替换初始块及其副本。
答案 1 :(得分:0)