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

Posted

技术标签:

【中文标题】正则表达式匹配标签内容,同时省略前导和尾随空格【英文标题】:Regex to match tag contents while simultaneously omitting leading and trailing whitespace 【发布时间】:2011-04-18 14:35:25 【问题描述】:

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

<tag>text</tag>

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

“文字”

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

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

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

【问题讨论】:

不要使用.*?在中间那里。那将消耗空格。请改用字母数字转义符。 【参考方案1】:

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 (我认为)。

【讨论】:

感谢您的回答和评论。我只是在寻找一些关于这个特定问题的正则表达式指针;但是,由于您的回答和您发布的链接,我将考虑使用 .NET 的 XmlReader 来解析我们的 KML 文件,而不是我们目前的做法。【参考方案2】:

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

【讨论】:

【参考方案3】:
        test = "<tag>     test    </tag>";
        string pattern3 = @"<tag>(.*?)</tag>";
        Console.WriteLine("0", Regex.Match(test,pattern3).Groups[1].Value.Trim());

【讨论】:

【参考方案4】:

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

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

您想要的部分是$matches[1]

【讨论】:

谢谢!这是我一直在寻找的小费类型,而且效果很好。

以上是关于正则表达式匹配标签内容,同时省略前导和尾随空格的主要内容,如果未能解决你的问题,请参考以下文章

需要正则表达式匹配最多8位的int,包括,前导或尾随0但不是单个数字“0”[关闭]

正则表达式只允许单词之间有一个空格

前导和尾随空格剪切 + 中间空格替换

正则表达式:匹配字母数字和空格,但前导空格除外

正则表达式删除字符前字符串中间的空格

如何使用正则表达式删除尾随空格?