C# 使用正则表达式和c从文本中提取变量#

C# 使用正则表达式和c从文本中提取变量#,c#,regex,C#,Regex,我面前可能有一个简单的任务,但我的正则表达式技能很差。有人能帮我吗,或者给我指出正确的方向吗?:-) 我正在解析的示例文本,我想对结果进行foreach,从中可以得到变量“URL”和介于两者之间的文本: Lorem ipsum door sit amet,concertetur[URL=/test.aspx?ID=12345]Lorem 伊普苏姆[/URL]一位精英。内华达州莫里斯市伊莱芬德国际水道 佐料nisi lacinia sit amet。奥奇莫里斯·福西布斯 ac[URL=/Defau

我面前可能有一个简单的任务,但我的正则表达式技能很差。有人能帮我吗,或者给我指出正确的方向吗?:-)

我正在解析的示例文本,我想对结果进行foreach,从中可以得到变量“URL”和介于两者之间的文本:

Lorem ipsum door sit amet,concertetur[URL=/test.aspx?ID=12345]Lorem 伊普苏姆[/URL]一位精英。内华达州莫里斯市伊莱芬德国际水道 佐料nisi lacinia sit amet。奥奇莫里斯·福西布斯 ac[URL=/Default.aspx?ID=2222222]lorem[/URL]convallis voliverpat,dolor 自由的独立自主者,我是大封建主义者 orci[URL=/Default.aspx?ID=333333]lorem ipsum dolor[/URL]quis augue。 整数nec euismod sem


这应该可以为您做到:

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"

}

这应该可以为您做到:

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
标记都是大写的

 "\[URL=([^\]]*)\]([^\[]*\)\[/URL\]"
这应该捕获两个组:1=
URL=
之后的内容,2=
[URL]…[\URL]
标记之间的内容

基本上

  • 由于
    [
    ]
    是保留的令牌,要匹配它们,您需要添加前缀 通过反斜杠(即“逃离”它们)

  • [^\[]
    匹配任何非开括号的字符

  • 括号确定可以捕获的组

警告:嵌套的URL标记不起作用,本身包含方括号的标记不起作用,带引号的字符串
“…”
也应该不带括号-也就是说,它们不会像正确的标记解析器那样被处理

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


但是,如果您确定数据没有此类异常,您就没事了!

这是请求的正则表达式

\[URL=(?<url>[^\]]*)\](?<text>[^\[]*)\[/URL\]
\[URL=(?[^\]*)\](?[^\[]*)\[/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);
   }
var regex=new regex(@“\[URL=(?[^\]]*)\](?[^\[]*)\[/URL\]);
var matches=regex.matches(textToSearchIn);
foreach(匹配中的匹配)
{
打印(“Url:{0}文本:{1}”,match.Groups[“Url”].Value,match.Groups[“Text”].Value);
}

这是请求的正则表达式

\[URL=(?<url>[^\]]*)\](?<text>[^\[]*)\[/URL\]
\[URL=(?[^\]*)\](?[^\[]*)\[/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);
   }
var regex=new regex(@“\[URL=(?[^\]]*)\](?[^\[]*)\[/URL\]);
var matches=regex.matches(textToSearchIn);
foreach(匹配中的匹配)
{
打印(“Url:{0}文本:{1}”,match.Groups[“Url”].Value,match.Groups[“Text”].Value);
}

-1表示非常糟糕的标题。这可能会有一些帮助:使用String.IndexOf()怎么样API来查找URL值,然后从该索引中可以读取到下一个URL字符串。希望您能获得资金a?当您感觉足够舒服时,可以看看这个gem:关于从何处开始阅读的好建议。-1表示非常糟糕的标题。这可能会有一些帮助:使用string.IndexOf()如何API来查找URL值,然后从该索引读取到找到下一个URL字符串。希望您能获得资金?当您感到足够舒适时,可以查看此宝石:关于从何处开始阅读的好建议。谢谢。这是我选择的方式。谢谢。这是我选择的方式。