正则表达式适用于regexlib,但不适用于C#代码

时间:2009-09-20 17:56:01

标签: c# regex

需要一些帮助,我有一个正则表达式,当我将模式和字符串解析为regexlib的测试器时似乎工作得很好。但是,当我把它放入C#时,同样不会发生,不匹配。

这是我的比赛模式,试过了两个:

string regPattern = "\\{\\$([^\\$\\}]+)\\$\\}";

我要解析的字符串来自数据库,在使用ToString()之后被放入变量中。下面是一个字符串示例(使用VS2008中的Text Visualizer),它在regextlib中有效但在C#中没有。

<p>1.Age?: -- Select One --<br />
2.HowFindProduct?: Friend/Relative Recommendation<br />
3.Influencers?: {$InfluencedDecision$}<br />
4.WherePurchase?: Office Superstore - i.e. Staples_ Office Depot_ Of<br />
5.ReplacementProduct?: This is a replacement to my previous product<br />
6.OtherBrands?: {$OtherBrands$}<br />
7.Income?: -- Select One --<br />
FirstName: John<br />
Initial: H<br />
LastName: Smith<br />
Address1: 123 any street<br />
Address2: suite 2<br />
City: any city<br />
State: CA<br />
ZipCode: 55555<br />
Country: usa<br />
EmailAddress: test@test.com<br />
Phone#: 714-555-1212<br />
ModelNumber: AXXXX<br />
SerialNumber: 23123d234s2s<br />
DateofPurchase: 09/09/2009<br />
NotifyMe1: on<br />
NotifyMe2: on</p>

虽然简单,如果有帮助,这是我正在使用的代码:

string regPattern = "\\{\\$([^\\$\\}]+)\\$\\}";
Regex.Replace(bodytext.ToString(), regPattern, "",RegexOptions.Multiline);

我也尝试使用@和Regex.Escape声明模式。需要一些帮助。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

嗯,你的第二个陈述目前是毫无意义的,因为你忽略了返回值。不要忘记字符串是不可变的 - 调用Regex.Replace不会改变任何现有的字符串;它将返回一个新字符串,并执行相应的替换操作。如果你这样做:

string regPattern = "\\{\\$([^\\$\\}]+)\\$\\}";
string replacedText = Regex.Replace(bodytext.ToString(), regPattern, 
                                    "", RegexOptions.Multiline);

然后replacedText是原始文件,删除了{$OtherBrands$}之类的内容 - 我在测试程序中尝试过这种方法。如果那不是你想要的,请提供更多关于你真正想要做的事情的信息。

话虽如此,使用逐字字符串文字会使您的正则表达式模式更清晰:

string regPattern = @"\{\$([^\$\}]+)\$\}";