Регулярное выражение работает в regexlib, но не в коде C # - PullRequest
0 голосов
/ 20 сентября 2009

Нужна помощь, у меня есть регулярное выражение, которое работает нормально, когда я помещаю шаблон и строку для анализа в тестер regexlib. Тем не менее, когда я помещаю его в C #, то же самое не происходит, никакого совпадения.

Вот мой образец совпадения, пробовал оба:

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

Моя строка для анализа поступает из базы данных и помещается в переменную после использования ToString (). Вот пример строки (с использованием Text Visualizer в VS2008), которая работает в 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 Ответ

1 голос
/ 20 сентября 2009

Ну, ваше второе утверждение в настоящее время довольно бессмысленно, потому что вы игнорируете возвращаемое значение. Не забывайте, что строки неизменны - вызов Regex.Replace не изменит никаких существующих строк; он вернет новую строку с соответствующими выполненными операциями замены. Если вы сделаете это:

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

затем replacedText - оригинал с удаленными вещами типа {$OtherBrands$} - я пробовал это в тестовой программе. Если это не то, что вы хотели, пожалуйста, дайте больше информации о том, что вы на самом деле пытаетесь сделать.

Сказав это, ваш шаблон регулярного выражения будет более понятным при использовании буквального строкового литерала:

string regPattern = @"\{\$([^\$\}]+)\$\}";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...