我有一个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>)
,但这只是选择了值标签之间的所有文字。
由于
答案 0 :(得分:0)
这是XML。对于您正在使用的任何平台使用XML解析器。对于除最简单,最受限制的场景之外的所有场景,您无法使用regexp可靠地执行此操作。
答案 1 :(得分:0)
考虑以下Regex ......
(?<=<value>.*?\").*(?=\".*</value>)
答案 2 :(得分:0)
如果您不需要,请不要使用外观;他们只是让你的问题变得更加困难。使用捕获组通常要容易得多,如下所示:
<value>[^<"]*"([^"]+)"
标记之后的[^<"]*
确保您匹配的字符串实际上位于该元素的内容中,而不是完全位于属性值或其他元素中。 ("[^"]+")
部分将引用的字符串保存在捕获组#1中。如果您想要不带引号的字符串,可以将其更改为"([^"]+)"
。
不应该需要匹配其余内容和结束标记。我当然假设任何<value>
的内容中最多只有一个带引号的字符串。