正则表达式匹配标记内容,同时省略前导和尾随空格

时间:2010-09-29 01:42:43

标签: regex whitespace lookbehind lookahead removing-whitespace

我正在尝试编写一个匹配标记的全部内容的正则表达式,减去任何前导或尾随空格。以下是输入的简要示例:

  

<tag&GT; 文字 </tag&gt;

我只希望匹配以下内容(请注意匹配前后的空格是如何修剪的):

  

“文本”

我目前正在尝试在.NET(Powershell)中使用这个正则表达式:

(?<=<tag>(\s)*).*?(?=(\s)*</tag>)

但是,此正则表达式匹配“text”加上标记内的前导空格,这是不受欢迎的。如何修复我的正则表达式按预期工作?

4 个答案:

答案 0 :(得分:4)

You should not use regext to parse html

改为使用解析器。

此外: Regex to remove body tag attributes (C#)

另外:RegEx match open tags except XHTML self-contained tags

如果所有这些都不能说服你,那么不要在你的表达中间使用点。使用字母数字转义符。你的点消耗了空白。请改用\ w(我认为)。

答案 1 :(得分:1)

放下外观;他们只是让工作变得更加复杂。而是使用捕获组来挑选您想要的部分:

<tag>\s*(.*?)\s*</tag>

您想要的部分可以$matches[1]

答案 2 :(得分:0)

使用这些正则表达式去除尾随和前导空格。 /^\s+//\s+$/

答案 3 :(得分:0)

        test = "<tag>     test    </tag>";
        string pattern3 = @"<tag>(.*?)</tag>";
        Console.WriteLine("{0}", Regex.Match(test,pattern3).Groups[1].Value.Trim());