Справка по регулярным выражениям - PullRequest
2 голосов
/ 25 мая 2011

Я пытаюсь использовать XSLT для преобразования XML в плоский текст. Один из узлов имеет следующее содержимое, и мне нужно извлечь строку, которая появляется перед текстом «fail» Я планировал использовать функцию анализа строки и не мог создать для нее регулярное выражение. Я пытался выяснить, могу ли я использовать шаблон прогнозирования, но не смог этого сделать.

Может кто-нибудь сказать, что было бы регулярным выражением для извлечения текста в квадратных скобках, прежде чем текст "fail":

Текст

[[2500, 4500]] fail(expected [[2100, 3000, 4000, 5000, 5400, 6000, 8000, 10000]])

Конечный выход

[2500, 4500]

Ответы [ 2 ]

2 голосов
/ 25 мая 2011

/\[(\[.+?\])\] fail/ и получите $1.

1 голос
/ 26 мая 2011

Вы можете сделать это даже в XSLT 1.0 (как одно выражение XPath 1.0) без регулярных выражений :

substring(substring(normalize-space(substring-before(.,' fail')), 2),
          1,
          string-length(substring(
                           normalize-space(substring-before(.,' fail')), 
                           2)
                        ) -1
           )

Поскольку ваша цель состоит в том, чтобы сделать это в XSLT, вы можете определить переменные для компонентов этого сложного выражения и получить простой и понятный код:

 <xsl:template match="/">
     <xsl:variable name="vStart" select=
       "normalize-space(substring-before(.,' fail'))"/>

    <xsl:variable name="vnormString" select=
     "normalize-space($vStart)"/>

    <xsl:variable name="vLen" select="string-length($vnormString)"/>

    "<xsl:value-of select="substring($vnormString, 2, $vLen -2)"/>"
 </xsl:template>
</xsl:stylesheet>

Когда это преобразование применяется к следующему документу XML:

<t>[[2500, 4500]] fail(expected [[2100, 3000, 4000, 5000, 5400, 6000, 8000, 10000]]) </t>

желаемый, правильный результат получается:

"[2500, 4500]"

Пояснение : Использование стандартных функций XPath 1.0: substring(), substring-before(), normalize-space() и string-length()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...