这有正则表达式吗?

时间:2014-03-24 14:24:00

标签: c# xml regex

我在查找正则表达式时遇到问题。我有一些文字,可能除以一些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>

我想搜索单词&#34;只是&#34;在xml中需要结果

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

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

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

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

这个找到每个&#34;&lt;&#34;到&#34;&gt;&#34;中间的一切(*)但不是另一个&#34;&lt;&#34;并用string.Empty替换它。所以我得到了纯文本,可以搜索我的&#34;只是&#34;,但结果只是&#34;只是&#34;,而不是xml介于......

有人有想法吗?

3 个答案:

答案 0 :(得分:1)

如果您使用单行XML(没有空格),则可以通过just (?:<[^>]*>)*个正则表达式部分中的j(?:<[^>]*>)*u(?:<[^>]*>)*s(?:<[^>]*>)*t 分割字母来创建正则表达式。例如:

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

如果您仍需要处理多行xml,可以按j(?! )(?:<[^>]*>\s*)*(?<! )u(?! )(?:<[^>]*>\s*)*(?<! )s(?! )(?:<[^>]*>\s*)*(?<! )t 正则表达式拆分字母。它将允许XML标记之间的空格,但不允许在字母之前或之后留出空格。

{{1}}

答案 1 :(得分:1)

最好不要在xml上使用regexp。只是不要。

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

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

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

答案 2 :(得分:1)

试试这个:

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