Как использовать Regex Replace для условного удаления блоков текста? - PullRequest
1 голос
/ 05 мая 2010

Я хотел бы условно удалить блок текста между указанными начальными и конечными разделителями. Приведенный ниже код не работает, но, надеюсь, он предлагает достаточно того, чего я пытаюсь достичь.

            If dr("ReferralPoints") > 0 Then
                Dim objRegex As Regex = New Regex("[HASNOVALUE:REFERRALPOINTS](.*)[/HASNOVALUE:REFERRALPOINTS]", RegexOptions.IgnoreCase + RegexOptions.Singleline)
                Dim result As String = objRegex.Replace(strBody, "")
            End If

Ответы [ 2 ]

3 голосов
/ 05 мая 2010

Регулярное выражение должно быть следующим:

\[HASNOVALUE:REFERRALPOINTS](.*)\[/HASNOVALUE:REFERRALPOINTS]

Вам нужно сбежать [ здесь, потому что это метасимвол регулярного выражения.

В VB.NET ( на основе этого краткого справочного листа ), похоже, \ не является escape-символом, поэтому вы можете просто написать это как:

"\[HASNOVALUE:REFERRALPOINTS](.*)\[/HASNOVALUE:REFERRALPOINTS]"

Смотри также


Кроме того, если вы не знаете, (.*) является жадным и будет принимать самый длинный матч. Вам может потребоваться (.*?) вместо этого, но это действительно зависит от определения проблемы.

---AxxZ----AxxZ----
   ^^^^^^^^^^^^
      A(.*)Z
0 голосов
/ 05 мая 2010

Вам нужно уйти от квадратных скобок? Во многих других языках регулярных выражений квадратные скобки создают класс символов , что означает, что движку нужно найти только один символ в скобках, чтобы назвать его совпадением.

Если вы выберете скобки, возможно, с обратной косой чертой '\', этого может быть достаточно. Я буду первым, кто признает, что не уверен насчет ASP.NET, в частности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...