我有一个可能很简单的任务,但我的RegEx技能很差。任何人都可以帮助我,或指出我正确的方向? : - )
示例文本我正在解析,而且我想对结果做一个foreach,我可以得到变量“URL”和中间的文本:
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。
答案 0 :(得分:4)
这应该适合你:
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"
}
答案 1 :(得分:0)
如果你的文字看起来完全像这样,那么这种事情就会奏效,即
如果您没有嵌套网址,则URL
标记全部为大写字母
"\[URL=([^\]]*)\]([^\[]*\)\[/URL\]"
这应该捕获两组:1 = URL=
之后的东西,2 = [URL]...[\URL]
标记之间的东西。
基本上,
由于[
和]
是保留令牌,为了匹配它们,您需要添加前缀
他们用反斜杠(即“逃避”他们)
[^\[]
匹配任何不是开放式括号的字符。
括号确定可以捕获的组。
注意事项:嵌套的URL标签不起作用,本身包含方括号的标签将不起作用,引用的字符串"..."
也应该没有括号 - 即它们不会被视为正确的标记解析器会。
据我所知,解决此类问题的唯一方法是进行完整的解析。
但如果您确定数据没有这些异常,那么您就可以了!
答案 2 :(得分:0)
这是请求的正则表达式
\[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);
}