使用RegEx和c#从文本中提取变量

本文关键字:提取 变量 文本 RegEx 使用 | 更新日期: 2023-09-27 18:11:35

我前面可能有一个简单的任务,但我的RegEx技能很差。有谁能帮我,或者给我指个方向吗?: -)

我正在解析的示例文本,我想在结果上做一个foreach,我可以得到变量"URL"和两者之间的文本:

[URL=/test.aspx?]ID = 12345] loremipsum[/URL] adipiscing。Nullam interdum eleifend mauris, nec调味品是一种很好的调味品。Mauris faucibus, orciac [URL =/default . aspx ?ID=222222]lorem[/URL] conallis volutpat, dolor自由的求索,自由的求索奥利奇[URL =/default . aspx ?ID=333333]lorem ipsum dolor[/URL] quis augue。整数nec euismod sem.

使用RegEx和c#从文本中提取变量

这个应该可以帮你:

Regex theRegex = new Regex(@"'[URL=([^']]+)']([^'[]+)'[/URL']");
string text = "Lorem ipsum dolor sit amet, consectetur[URL=/test.aspx?ID=12345]lorem ipsum[/URL] adipiscing elit. Nullam interdum eleifend mauris, nec condimentum nisi lacinia sit amet. Mauris faucibus, orci ac[URL=/Default.aspx?ID=222222]lorem[/URL] convallis volutpat, dolor libero sollicitudin quam, id feugiat magna orci[URL=/Default.aspx?ID=333333]lorem ipsum dolor[/URL] quis augue. Integer nec euismod sem.";
MatchCollection matches = theRegex.Matches(text);
foreach (Match thisMatch in matches)
{
//        thisMatch.Groups[0].Value is e.g. "[URL=/test.aspx?ID=12345]lorem ipsum[/URL]"
//        thisMatch.Groups[1].Value is e.g. "/test.aspx?ID=12345"
//        thisMatch.Groups[2].Value is e.g. "lorem ipsum"
}

如果您的文本看起来完全像这样,则这种事情将起作用,即:你没有嵌套的url,你的URL标签都是大写的

 "'[URL=([^']]*)']([^'[]*')'[/URL']"

这应该捕获两组:1 = URL=之后的东西,2 = [URL]...['URL]标记之间的东西。

,

  • 作为[]是保留令牌,要匹配它们需要前缀它们被反斜杠(即。"逃离")

  • [^'[]匹配任何非左括号的字符。

  • 括号表示可以捕获的组

注意事项:嵌套的URL标签不起作用,本身包含方括号的标签不起作用,加上引号的字符串"..."也应该没有括号——也就是说,它们不会像正确的标记解析器那样被处理。

据我所知,解决这种问题的唯一方法是进行完整的解析。

但如果你确定数据没有这些异常,你就没事了!

这是请求的正则表达式

'[URL=(?<url>[^']]*)'](?<text>[^'[]*)'[/URL']

使用以下代码访问请求的值:

   var regex = new Regex(@"'[URL=(?<url>[^']]*)'](?<text>[^'[]*)'[/URL']");
   var matches = regex.Matches(textToSearchIn);
   foreach (Match match in matches)
   {
       Debug.Print("Url: {0} Text: {1}", match.Groups["url"].Value, match.Groups["text"].Value);
   }