gpt4 book ai didi

c# - 使用 Regex 解析 URL,忽略 Markdown 中的代码块和代码片段

转载 作者:行者123 更新时间:2023-12-04 15:16:13 25 4
gpt4 key购买 nike

我目前在我的 C#/.NET Core 应用程序中使用这个正则表达式来解析 markdown 文件中的 HTTP、HTTPS 和 FTP url:

static readonly Regex _urlRegex = new Regex(@"(((http|ftp|https):\/\/)+[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?)");

void UpdateGitHubReadme(string gitHubRepositoryName, string gitHubReadmeText)
{
var updatedMarkdown = _urlRegex.Replace(gitHubReadmeText, x => HandleRegex(x.Groups[0].Value, gitHubRepositoryName.Replace(".", "").Replace("-", "").ToLower(), "github", gitHubUser.Alias));

//handle updated markdown
}

static string HandleRegex(in string url, in string repositoryName, in string channel, in string alias)
{
//handle url
}

我希望更新此正则表达式以忽略 Markdown 代码块和 Markdown 代码片段内的网址。

示例 1

应忽略以下 URL,因为它在代码块内:

```
{"name": "布兰登",“博客”:“https://codetraveler.io”

```

例子2

应忽略以下 URL,因为它在代码段内:

`curl -I https://www.keycdn.com `

最佳答案

您可以利用已有匹配评估器的现有代码作为 Regex.Replace 中的替换参数.

您需要向当前正则表达式添加一个替代项(使用 | 替代运算符)以匹配您要忽略匹配项的上下文,然后检查哪个组匹配。

您应该添加的备选方案是 (?<!`)(`(?:`{2})?)(?:(?!\1).)*?\1 , 它匹配

  • (?<!`) - 不允许立即向左反引号
  • (`(?:`{2})?) - 第 1 组:反引号,然后是可选的双反引号序列
  • (?:(?!\1).)*? - 除换行符以外的任何字符,零次或多次出现但尽可能少,不会启动与第 1 组中捕获的相同字符序列
  • \1 - 在第 1 组中捕获的相同字符序列

查看示例代码:

static readonly Regex _urlRegex = new Regex(@"(?<!`)(`(?:`{2})?)(?:(?!\1).)*?\1|((?:ht|f)tps?://[\w-]+(?>\.[\w-]+)+(?:[\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?)", RegexOptions.Singleline);

void UpdateGitHubReadme(string gitHubRepositoryName, string gitHubReadmeText)
{
var updatedMarkdown = _urlRegex.Replace(gitHubReadmeText, x => x.Groups[2].Success ?
HandleRegex(x.Groups[0].Value, gitHubRepositoryName.Replace(".", "").Replace("-", "").ToLower(), "github", gitHubUser.Alias) : x.Value);

//handle updated markdown
}

我稍微修改了 URL 模式,使其更简洁、更高效。

关于c# - 使用 Regex 解析 URL,忽略 Markdown 中的代码块和代码片段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64285562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com