查找两个标签之间的内容

时间:2014-04-27 10:32:48

标签: .net regex

我有各种标签,例如<nav class="filters">XXX</nav><!-- Google Tag Manager --> XXX <!-- End Google Tag Manager -->我想搜索和替换但是还没有能够这样做。此时没有任何替换,但我可能需要更换一些文字

我尝试过使用以下功能,但它不起作用。请指教!

<nav class="filters">(.*?)</nav> or <nav class=\"filters\">(.*?)</nav>

似乎我没有让它显而易见,但不确定它会变得多么简单: - (

如果它在一行上似乎有用,但在下面的多个时,它不会

<nav class="filters">
STRING CONTENT
</nav>

1 个答案:

答案 0 :(得分:0)

Janusz,这些简单的正则表达式会做你想要的。

第一个:搜索

(?is)<nav class="filters">[^<]*</nav>

对于第二个:搜索

(?is)<!-- Google Tag Manager -->[^<]*<!-- End Google Tag Manager -->

示例:

using System;
using System.Text.RegularExpressions;
class Program {
static void Main() {

string resultString = null;
string s1 = @"string was here>>> <nav class=""filters"">
            STRING CONTENT
            </nav> <<< string was here";

string s2 = Regex.Replace(s1, "(?is)<nav class=\"filters\">[^<]*</nav>", "");

Console.WriteLine(s2);
Console.WriteLine("\nPress Any Key to Exit.");
Console.ReadKey();
} // END Main
} // END Program

输出:

string was here>>>  <<< string was here

[^<]*将占用任何数量不是<的字符,包括换行符,这是您的问题。

使用.*点星语法,您也可以吃掉换行符,但只能设置(?s)“点匹配换行符”标志。但一般情况下,只要更具体的东西可以避免点星,我们就会这样做,因此选择[^<]*

请注意""filters""中的双引号与正则表达式无关。你可能知道这一点,但是两个双引号是你如何以逐字字符串的形式转义双引号。