【问题标题】:Is there a regular expression for this?这个有正则表达式吗?
【发布时间】:2014-03-24 14:24:00
【问题描述】:

我在查找正则表达式时遇到问题。我有一些文本,可能被一些 xml 分割。例如:

<root>
  <text>Thi</text>
  <text>s is ju</text>
  <text><bold>s</bold></text>
  <text>t a tes</text>
  <text><italic>t</italic></text>
</root>

我想在xml中搜索“just”这个词,需要结果

ju</text>
<text><bold>s</bold></text>
<text>t

有没有可能用正则表达式得到这个结果?

顺便说一句:我已经有了从 xml 中获取纯文本的正则表达式,它是(在 C#-Syntax 中):

string plaintext = new Regex(@"\<[^\<]*\>").Replace(xmlstring, string.Empty);

这会找到每个“”之间的所有内容(*),但没有找到另一个“

有人有想法吗?

【问题讨论】:

  • 不要为此使用正则表达式;它们不适合解析 XML。改用真正的 XML 解析器,这就是它们的用途。

标签: c# xml regex


【解决方案1】:

最好不要在 xml 上使用正则表达式。只是不要。

根据您的任务,在您要查找的字符串的每个字符之后,您可以期待任何 xml 标记。所以基本上你需要在每个字母之后插入“maybetag”正则表达式部分 - 像这样:

j(\<[^\<]*?\>\s*)*u(\<[^\<]*?\>\s*)*s(\<[^\<]*?\>\s*)*t(\<[^\<]*?\>\s*)*

工作样本http://www.rexfiddle.net/WdkpliZ

【讨论】:

  • 即使st-ju stjus t之前有空格也会匹配。
  • 当然,这是一个想法,当然不是完全可用的示例。它在很多情况下都不起作用,比如如果 XML 有 CDATA 项等 - 再一次,正则表达式不是解析 XML 的工具。
  • 是的,您对正则表达式和 xml 的看法是正确的,但作为搜索文本突出显示或保留提取块的文本格式的快速解决方案,它可能是可行的(我猜作者想要实现这些任务)。
【解决方案2】:

试试这个:

/j(<[^>]+>)*u(<[^>]+>)*s(<[^>]+>)*t/

【讨论】:

    【解决方案3】:

    如果您在单行中有 XML(没有空格),您可以通过将 just 中的字母拆分为 (?:&lt;[^&gt;]*&gt;)* 正则表达式部分来创建您的正则表达式。示例:

    j(?:<[^>]*>)*u(?:<[^>]*>)*s(?:<[^>]*>)*t
    

    如果还需要处理多行xml,可以通过(?! )(?:&lt;[^&gt;]*&gt;\s*)*(?&lt;! )正则表达式拆分字母。它允许 XML 标记之间有空格,但不允许字母前后有空格。

    j(?! )(?:<[^>]*>\s*)*(?<! )u(?! )(?:<[^>]*>\s*)*(?<! )s(?! )(?:<[^>]*>\s*)*(?<! )t
    

    【讨论】:

      猜你喜欢
      • 2011-02-20
      • 1970-01-01
      • 2012-06-09
      • 2010-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-28
      相关资源
      最近更新 更多