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

标签 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/L I Š M ,ABBA.The.Movie.1977.720p.BluRay.DTS.x264-iONN Phttp://site.com/forum/f89/abba-movie-1977-720p-bluray-dts-x264-ion-428687/&

如何解析它,以便至少可以获得以下链接:

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

其中 428687id 编号。

所以我会有一个完整链接和一个id

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

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

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

顺便说一句,我愿意为正确答案提供 500 赏金。

最佳答案

类似于下面的正则表达式?

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)链接中不存在空格),并假设它以数字和尾部斜杠结尾(这将正确删除示例中的 & 或其他尾随文本)。

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

更新:如果破折号+数字+斜杠在 URL 中出现多次,则必须使用贪婪,但连续的链接(没有带有空格的附加文本)将被匹配在一起。如果破折号+数字+斜杠每个 URL 仅出现一次,则首选惰性。这是上面代码中当前的解决方案。

替代方法

从更新和额外信息中,我了解到文本中有很多不清楚的地方。另一种方法可能更简单:拆分 http:// 上的所有内容并查看结果。这可以防止必须创建复杂的向前/向后正则表达式,并确保正确处理连续链接(即,中间没有文本):

// zero-width split:
string[] linksWithText = Regex.Split(yourString, @"(?<=http:\S+-\d+/)");
foreach (string link in linksWithText)
{
    Match m = Regex.Match(link, @"(.*)(http:\S+-(\d+)/)$");
    if (m.Success)
    {
        string text = m.Groups[1].Value;
        string url = m.Groups[2].Value;
        string id = m.Groups[3].Value;
    }
}

更新:更新了替代方法。首先是文本(名称),然后是 url。请注意负向查找表达式在零宽度点上进行分割,将 URL 之前的任何内容提取到 URL 的末尾。

关于c# - C# 的简单正则表达式帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1630922/

相关文章:

javascript - 使用正则表达式,有条件地替换为 $1 或空字符串

python - 在Python的正则表达式中提取两个标记之间的文本并处理反斜杠

c# - 在 .NET 中重定向来自 COM 对象包装器的 STDERR 输出

C# 和 WPF : Programmatic Control

c# - Entity Framework (MVC) - 为具有 protected 属性的模型创建 Controller 时出现问题

c# - 使用 C# (Xamarin) 编写 Android 应用程序

.net - 什么会导致项目突然忘记其中一个引用?

javascript - 正则前瞻千位分隔符的正则表达式不会匹配点后的数字

c# - WPF 重复密码 IMultiValueConverter

c# - Json.net 慢序列化和反序列化