c# - 正则表达式: Markdown 式链接匹配

标签 c# regex markdown

我想解析 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/

相关文章:

c# - 使用多个类时,通常处理 Try/Catch block 和错误的正确方法是什么?

c# - 查找并插入

html - 代码块中的背景突出显示文本?

python - 自定义 Markdown 解析

c# - NetworkStream 连接自动关闭

c# - UWP AutoNext 函数

c# - 将 mysql 数据库中的字符串日期与 Entity Framework c# 进行比较

正则表达式:匹配除特定模式之外的所有内容

php - 如果单词是特定字符,如何选择单词的所有开头字符?

Markdown 文件中的 GitHub 相对链接