我想解析 Markdown 样式链接,但在匹配引用样式链接时遇到了一些问题。像这个:[id]: http://example.com/"Optional Title Here"
我的正则表达式获取 ID 和 URL,但不是标题。
这是我所拥有的:
/\[([a-zA-Z0-9_-]+)\]: (\S+)\s?("".*?"")?/
我仔细检查并将引用添加到哈希表。 id 作为键,值是我创建的名为 LinkReference
的类的一个实例,它只包含 url 和标题。如果问题不是我的正则表达式,而是我的代码将匹配项添加到哈希表,那么我的代码也是如此:
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));
}
最佳答案
我认为您的 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,在允许空格方面保持自由并没有坏处)
关于c# - 正则表达式: Markdown 式链接匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2894897/