我用正则表达式进行字符替换,但遇到空格就不进行替换了,
也许你会说把" "先替换成 但嵌套替换怎么进行啊?
比如****,而“****”有可能是,这样在替换的过程中可能会把 替换成 <img src="http://img.aaa.com/a.gif">
这样替换一次后,又成了<img src="http://img.aaa.com/a.gif">这种格式了,中间又有空格了,所以我总觉得把" "先替换成 不是一个解决之道,大家还有别的办法吗?
我写的替换代码如下:temp = Regex.Replace(temp, @"\[URL=(?<addr>[\S\t]*?)\](?<title>[\S\t]*?)\[\/URL\]", "<a href='${addr}' TARGET='_blank'>${title}</A>",RegexOptions.IgnoreCase);这会出现上述空格问题,高手们如何改啊?
也许你会说把" "先替换成 但嵌套替换怎么进行啊?
比如****,而“****”有可能是,这样在替换的过程中可能会把 替换成 <img src="http://img.aaa.com/a.gif">
这样替换一次后,又成了<img src="http://img.aaa.com/a.gif">这种格式了,中间又有空格了,所以我总觉得把" "先替换成 不是一个解决之道,大家还有别的办法吗?
我写的替换代码如下:temp = Regex.Replace(temp, @"\[URL=(?<addr>[\S\t]*?)\](?<title>[\S\t]*?)\[\/URL\]", "<a href='${addr}' TARGET='_blank'>${title}</A>",RegexOptions.IgnoreCase);这会出现上述空格问题,高手们如何改啊?
string result = Regex.Replace(yourStr, @"\[url=(?<addr>[^\]]*)\](?<title>[^\[]*)\[/url\]", "<a href='${addr}' TARGET='_blank'>${title}</a>", RegexOptions.IgnoreCase);
Regex.Replace(temp, @"\[B\](?<title>[\S\t]*?)\[\/B\]", "<B>${title}</B>",RegexOptions.IgnoreCase);
与任何空白字符匹配。等效于 Unicode 字符类别 [\f\n\r\t\v\x85\p{Z}]。如果用 ECMAScript 选项指定了符合 ECMAScript 的行为,则 \s 等效于 [ \f\n\r\t\v]。
\S
与任何非空白字符匹配。等效于 Unicode 字符类别 [^\f\n\r\t\v\x85\p{Z}]。如果用 ECMAScript 选项指定了符合 ECMAScript 的行为,则 \S 等效于 [^ \f\n\r\t\v]。
string result = Regex.Replace(yourStr, @"\[B\]([^\[]*)\[/B\]", @"<B>$2</B>", RegexOptions.IgnoreCase);
改成了\s也是没有效果啊
string result = Regex.Replace(yourStr, @"\[B\](?<title>[\s\S]*?)\[\/B\]", "<B>${title}</B>", RegexOptions.IgnoreCase);
用[\s\S]来匹配任意字符,这时要用非贪婪模式[\s\S]*?
如果能排除和标签之间不会再出现[这个字符,可以用上面的[^\[],这里采用贪婪模式[^\[]*,会提高匹配效率
string yourStr = "aa aa";
string result = Regex.Replace(yourStr, @"\[B\]([^\[]*)\[/B\]", @"<B>$2</B>", RegexOptions.IgnoreCase);
你试过这样的吗?
string result = Regex.Replace(test, @"\[B\](?<title>[^\[]*)\[/B\]", @"<B>${title}</B>", RegexOptions.IgnoreCase);
string test = "aa aa";
string result = Regex.Replace(test, @"\[B\](?<title>[^\[]*)\[/B\]", @"<B>${title}</B>", RegexOptions.IgnoreCase);
我试过了,这种情况是有效的,我最开始就是这么写的。
但是如果这个串是这样的:
string test = "aa aa";
或者是
string test = "aa aa";
在进行后面的匹配的时候好像就不行了。
string test = "aa aa";
或者是
string test = "aa aa";
这两种情况你想要的结果PS:先吃饭去了,吃饱了有了力气再回来讨论
Regex.Replace(temp, @"\[I\](?<title>[\s\S]*?)\[\/I\]", "<I>${title}</I>",RegexOptions.IgnoreCase);
注意是\s\S,单独的\s,或者\S都达不到我想要的效果,经过反复测试\s\S,还是可以的,它能正确的匹配例如这种: