基本上,我试图在多行文本框中找到以下模式:
[p]随便一个字bla bla随便一个字[/p]
1.)该模式可以在文本框中出现 n 次,我也希望找到它 n 次。
2.) [p] 和 [/p] 之间可以是任何字符,包括空格和换行符(C# 中的“\r\n”)
3.) 我想要整个模式,包括 [p] 和 [/p]
以下代码非常接近我想要的结果。问题是,[p] 和 [/p] 之间可能会出现多个换行符。我已经尝试了很多很多解决方案。没有什么对我有用。
private void getTextFromTag2(String Tag, String txt)
{
txt = txt.Replace("\r", "");
string re1 = "(\\[";
string re2 = "p";
string re3 = "\\]";
string re4 = ".*"; // Here lies the problem
string re5 = ""; // Left open for a solution => \r\n cann occur n-times
string re6 = "\\[";
string re7 = "\\/";
string re8 = "p";
string re9 = "\\])";
Regex r = new Regex(re1 + re2 + re3 + re4 + re5 + re6 + re7 + re8 + re9, RegexOptions.IgnoreCase | RegexOptions.Multiline);
MatchCollection mc = r.Matches(txt, 0);
foreach (Match match in mc)
{
String c1 = match.Groups[1].ToString();
Console.Write(c1 + "\r\n");
}
}
如您所见,我已经将 txt 中的 "\r" 替换为 "",因为 .NET 的 RegEx 引擎似乎只需要 "\n" 作为换行符。
我认为,我的代码中的问题可以在 re4 和 re5 中找到。re4 可以找到任何字符并且效果很好,只要没有换行符。
我认为,re4 应该说“任何字符,包括空格和 \n”。但我真的不明白。
所以再一次:即使模式在文本框中多次出现,Everting 也能正常工作。问题是,当 [p] 和 [/p] 之间发生换行时
这是一个不起作用的例子
[p]BlaBla BlaBla \r\n
BlaBla BlaBla \r\n
\r\n
BlaBla
[/p]
这是一个有效的例子
[p]BlaBla BlaBla[/p]
\r\n
\r\n
[p]Even more BlaBla[/p]
\r\n
\r\n
[p]Much more BlaBla[/p]
请原谅我的英语。我不是以英语为母语的人。
谢谢你。
这是代码,现在对我有用。改变的东西是 //Changed Tagged
private void getTextFromTag2(String Tag, String txt)
{
//txt = txt.Replace("\r", ""); //Changed
string re1 = "(\\[";
string re2 = "p";
string re3 = "\\]";
string re4 = ".*";
string re5 = "?"; // Changed
string re6 = "\\[";
string re7 = "\\/";
string re8 = "p";
string re9 = "\\])";
Regex r = new Regex(re1 + re2 + re3 + re4 + re5 + re6 + re7 + re8 + re9, RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Singleline); //Changed
MatchCollection mc = r.Matches(txt, 0);
foreach (Match match in mc)
{
String c1 = match.Groups[1].ToString();
Console.Write(c1 + "\r\n");
}
}
非常感谢。