0

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

<tag> 正文 </tag>

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

“文本”

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

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

但是,此正则表达式匹配“文本”加上标签内的前导空格,这是不希望的。如何修复我的正则表达式以按预期工作?

4

4 回答 4

4

您不应该使用 regext 来解析 html

请改用解析器。

另外: 正则表达式删除正文标签属性(C#)

另外:RegEx 匹配开放标签,XHTML 自包含标签除外

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

于 2010-09-29T01:46:24.187 回答
1

放弃环视;他们只是让工作变得比它需要的更复杂。相反,使用捕获组来挑选您想要的部分:

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

您想要的部分可作为$matches[1].

于 2010-09-29T04:43:40.157 回答
0

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

于 2010-09-29T01:50:13.337 回答
0
        test = "<tag>     test    </tag>";
        string pattern3 = @"<tag>(.*?)</tag>";
        Console.WriteLine("{0}", Regex.Match(test,pattern3).Groups[1].Value.Trim());
于 2010-09-29T02:14:47.553 回答