1

我有一个 XML 文件,我需要在其中找到一个字符串,但前提是它存在于其他两个字符串之间。

例如:

<data name="gDefaultTheme" xml:space="preserve">
<value>Temaet "Standard" kates.</value>
</data>
<data name="gCannot" xml:space="preserve">
<value>Temaet "{0}" er satt som staettes.</value>
</data>

在上面的 xml 中,我需要在<value>标签中找到双引号,而不是在 XML 本身中找到任何双引号。

到目前为止,我最接近的是(?<=<value>)(.*?)(?=</value>),但这只是选择了值标签之间的所有文本。

谢谢

4

3 回答 3

0

它是 XML。对您正在使用的任何平台使用 XML 解析器。除了最简单、最受限制的场景之外,您无法使用正则表达式可靠地做到这一点。

于 2013-11-06T20:31:10.833 回答
0

如果没有必要,不要使用环视;他们只是让你的问题变得更加困难。使用捕获组通常要容易得多,如下所示:

<value>[^<"]*"([^"]+)"

[^<"]*after 标记确保您匹配的字符串实际上在该元素的内容中,而不是在属性值或完全在另一个元素中。该("[^"]+")部分将引用的字符串保存在捕获组 #1 中。如果您想要不带引号的字符串,可以将其更改为"([^"]+)".

不需要匹配其余内容和结束标签。我当然假设 any<value>的内容中最多有一个带引号的字符串。

于 2013-11-06T22:55:10.207 回答
0

考虑以下正则表达式...

(?<=<value>.*?\").*(?=\".*</value>)
于 2013-11-06T20:40:48.767 回答