C#的简单正则表达式帮助

时间:2009-10-27 13:48:21

标签: c# .net regex parsing binary

我有一个未完成的二进制文件,其中包含一些我可以使用正则表达式恢复的信息。内容如下:

G $ 12.Angry.Men.1957.720p.HDTV.x264-HDLH Lhttp://site.com/forum/f89/12-angry-men-1957-720p-hdtv-x264-hdl-538403/LIŠ M,ABBA.The.Movie.1977.720p.BluRay.DTS.x264-iONN Phttp://site.com/forum/f89/abba-movie-1977-720p-bluray-dts-x264-ion-428687/&

我如何解析它,这样我至少可以得到links

http://site.com/forum/f89/abba-movie-1977-720p-bluray-dts-x264-ion-428687/

其中428687id号码。

所以我会有full linkid

之前的其他名称是链接的名称:

ABBA.The.Movie.1977.720p.BluRay.DTS.x264-iON

虽然我不确定这些是否可以解析。我注意到他们在LINKSNAMES之前和之后都有一个角色。那么也许这可以缩小问题的范围呢?

顺便说一下,我愿意为正确答案给予500赏金。

2 个答案:

答案 0 :(得分:2)

类似下面的正则表达式?

MatchCollection matches = Regex.Matches(yourString, @"http://\S+?-(\d+)/") 
foreach(Match m in matches)
{
    string id = m.Captures[0].Value;
    string url = m.Value;
}

将获取链接(从http://开始)然后所有内容都不是空格(保证空格不在HTTP(URI)链接中),并假设它以数字和尾部斜杠结尾(这将正确删除{您的示例或其他尾随文本中的{1}}。

编辑:整个匹配是链接,ID在第一个捕获括号中,更新代码以显示如何获取信息。

更新:如果破折号+数字+斜线可以在网址中出现一次以上,那么必须使用贪婪,但是连续的链接(没有其他文字有空格)将匹配在一起。如果每个URL只出现一次破折号+数字+斜杠,则首选懒惰。这是上面代码中的解决方案。

替代方法

根据更新和额外信息,我了解到有很多关于文本的不清楚。另一种方法可能更容易:在&上拆分所有内容并浏览结果。这可以防止必须制作复杂的前瞻/后向正则表达式,并确保正确处理连续的链接(即,中间没有文本):

http://

更新:替代方法已更新。首先是文本(名称),然后是url。注意表达式后面的负面外观要在零宽度点上分割,在之前将带到网址的末尾

答案 1 :(得分:1)

假设所有网址都以连字符结尾,后跟一些任意数字,后跟反斜杠。这可行。

`http://[^ ]*-?<id>(\d)+/`

您怎么看?

更新:试试这个: -

http://(?!http://)[^ ]*-?<id>(\d)+/

更新代码(?!http://)以停止匹配两个网址的网址与位于不是空格的网址之间的中间的一些数据连接。

您可以按名称获取捕获的组。整个搜索将是匹配的URL,组将匹配id。