我想解析markdown样式链接,但是我在匹配参考样式链接时遇到了一些麻烦。像这样:[id]: http://example.com/ "Optional Title Here"
我的正则表达式获取id和url,但不是标题。
继承我所拥有的:
/\[([a-zA-Z0-9_-]+)\]: (\S+)\s?("".*?"")?/
我查看并添加对哈希表的引用。 id作为键,值是我创建的一个名为LinkReference
的类的实例,它只包含url和title。如果问题不是我的正则表达式,并且我的代码将匹配添加到哈希表,那么我的代码也是如此:
Regex rx = new Regex(@"\[([a-zA-Z0-9_-]+)\]: (\S+)\s?("".*?"")?");
MatchCollection matches = rx.Matches(InputText);
foreach (Match match in matches)
{
GroupCollection groups = match.Groups;
string title = null;
try
{
title = groups[3].Value;
}
catch (Exception)
{
// keep title null
}
LinkReferences.Add(groups[1].Value, new LinkReference(groups[2].Value, title));
}
答案 0 :(得分:4)
我认为您的URL和标题之间实际上有两个空格(它不会显示在Stack Overflow的呈现HTML中,但我可以在页面的源代码中看到它。 ..)
无论如何,我相信您要将\s?
(0或1个空格)更改为\s*
(0个或更多个空格):
var rx = new Regex(@"\[([a-zA-Z0-9_-]+)\]: (\S+)\s*("".*?"")?");
您可能还希望在“:”的两侧以及其他几个位置允许多个空格,如下所示:
var rx = new Regex(@"\[\s*([a-zA-Z0-9_-]+)\s*\]\s*:\s*(\S+)\s*("".*?"")?");
(允许空间自由,IMO没有坏处)