【问题标题】:c# regex replacec# 正则表达式替换
【发布时间】:2011-03-21 07:27:51
【问题描述】:

我有一个包含带有 html 内容的页面对象的数据库。数据库中的很多行都包含此内容

  <p style="float: left; margin-right: 20px; height: 300px;">
        <img src="...">More html ...
 </p>

所以我创建了一个超级简单的正则表达式替换:

 foreach (var page in db.Pages)
                {
                    string pattern = @"<p style=""float: left; margin-right: 20px;"">(.*)</p>/ms";
                    if( Regex.Match(page.Content, pattern).Success)
                    {
                        page.Content = Regex.Replace(page.Content, pattern, "<div class=\"contentimage\" >$1</div>");
                    }
                }
//                db.SubmitChanges();

虽然当我在正则表达式测试工具中运行正则表达式时,它仍然有效。但在 c# 代码中却没有。谁能帮帮我。

如果有人知道如何使用 sql 中的正则表达式替换进行更新,那很好。

Regex 不是我的强项(尽管很遗憾)。但这是我要尽快学习的事情清单;)

【问题讨论】:

  • 我不想这么说,但正则表达式真的不是处理 html 的首选工具...
  • 现在来吧,马克,你从来没有读过 perl 网络脚本吗?这些人清楚地表明,正则表达式是一切的首选工具!除非您是那些认为代码应该是可读的 lamo microsoft 开发人员之一,否则正则表达式应该有一组标准的非语言特定指令..
  • 对于所有认为应该使用正则表达式处理 HTML 的人,我建议好好阅读:stackoverflow.com/questions/1732348/…恕我直言,每次有人用regexhtml 标记问​​题时,他应该是引用了这个答案。
  • @Darin +1 引用该问题

标签: c# sql regex replace


【解决方案1】:

您的问题是“/ms”。您正在尝试指定几个正则表达式标志,但 C# 指定的标志与 php/perl 不同(您的正则表达式测试器可能测试针对这些语言的正则表达式。我建议 Expresso(它是免费的)用于使用 .NET 正则表达式)。将您的模式更改为:

string pattern = @"<p style=""float: left; margin-right: 20px; height: 300px;"">(.*)</p>";

(另请注意,我添加了“height”属性以使其匹配——这只是一个错字吗?)

你的正则表达式实例化到这个:

if( Regex.Match(page.Content, pattern,RegexOptions.Multiline | RegexOptions.Singleline).Success)

它应该可以工作。

[编辑] 哦,修复替换方法:

page.Content = Regex.Replace(page.Content, pattern, "<div class=\"contentimage\" >$1</div>", RegexOptions.Multiline | RegexOptions.Singleline);

【讨论】:

  • 我完全同意 Marc 的观点,除非您的 HTML 总是与您的示例非常相似,否则 Regex 并不是真正可行的方法。
  • 非常感谢,工作就像一个魅力。 @Marc Gravell:正则表达式是这项工作的正确工具。尝试使用 html 解析器将其放入不到 10 行:D 这就像一个魅力,ergo: regex 1 - htmlparser 0 ;) 我自己不是 regex 的粉丝,但我越来越成为一个人
  • 好吧,只要 HTML 总是像这样完美地形成,它就可以正常工作。但是,任何其他情况都会中断。
  • 它工作得很好,当然我已经想出了替换 ;) 很大的帮助,再次感谢
猜你喜欢
  • 1970-01-01
  • 2022-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
相关资源
最近更新 更多