Как использовать регулярное выражение для символа после цифры - PullRequest
0 голосов
/ 18 октября 2019

Я хочу выбрать @reId, у которого есть символ после цифры (fig-FigF.3A).

Ввод:

<p type="TOC_Level Two Entry">
  <doclink refType="anchor" refId="fig-FigF.3A">Figure F.3A—Text<c
      type="TOC_Leader Dots"><t/></tps:c></tps:doclink>
  <ref format="TOC Page Number" refType="anchor" refId="fig-FigF.3A"/>
<p>

Вывод должен быть:

<p type="TOC_Level Two Entry"><doclink refType="anchor" 
  refId="fig-FigF.3A">F.3A<tps:t/>Text<c 
  type="TOC_Leader Dots"><t/></c></tps:doclink><ref
   format="TOC Page Number" refType="anchor" refId="fig-FigF.3A"/></tps:p>

Пробный код:

Я пытался решить эту проблему с помощью этого регулярного выражения ^(Figure )(\d+|[A-Z].\d+)(—)(.*). Но это не работает.

Как я могу решить это? Я использую xslt 2.0

Ответы [ 2 ]

1 голос
/ 18 октября 2019

Ist не правильно сформировал вашу проверку ввода plz

, если вы хотите только изменение текста, используйте этот код с функцией замены:

Вход:

    <?xml version="1.0" encoding="UTF-8"?>
<p type="TOC_Level Two Entry">
<tps:doclink refType="anchor" refId="fig-FigF.3A" xmlns:tps="htttp:\\tps">Figure F.3A—Text<tps:c type="TOC_Leader Dots"><t/></tps:c></tps:doclink>
<ref format="TOC Page Number" refType="anchor" refId="fig-FigF.3A"/>
</p>

код:

    <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">
    <xsl:output method="xml" omit-xml-declaration="no"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="text()">
        <xsl:value-of select="replace(., '(Figure )([A-Z])([.])([0-9A-Z]+)(.+?)([A-Za-z]+)', '$2$3$4')"/>
    </xsl:template>

</xsl:stylesheet>

выход:

    <?xml version="1.0" encoding="UTF-8"?>
<p type="TOC_Level Two Entry">
<tps:doclink xmlns:tps="htttp:\\tps" refType="anchor" refId="fig-FigF.3A">F.3B<tps:c type="TOC_Leader Dots"><t/></tps:c></tps:doclink>
<ref format="TOC Page Number" refType="anchor" refId="fig-FigF.3A"/>
</p>

DEMO: https://xsltfiddle.liberty -development.net / ncntCS9 / 1

1 голос
/ 18 октября 2019

Итак, пытаясь извлечь из этого четкую формулировку требований, кажется, вы хотите, чтобы вход «fig-FigF.3A» приводил к выходу «F.3A». В качестве альтернативы, возможно, вы хотите трактовать «Рисунок F.3A - Текст» как ввод? С одной стороны, вы говорите, что выбираете атрибут @reId, которого нет в вашем вводе;с другой стороны, ваша попытка найти решение заключается в поиске текста «Рисунок», который появляется в текстовом узле, а не в атрибуте.

Так что я думаю, что нам нужно гораздо более четкое изложение требований.

Другая проблема с этим как с заявлением о требованиях состоит в том, что вы действительно приводите только один пример, а не общее правило. В вашем вопросе есть намек на общее правило: «у которого есть символ после цифры». Но что это значит? Ваш пример, кажется, ищет шаблон буква-точка-цифра, который совсем не соответствует вашему описанию проблемы.

Извините, ТАК модераторы, это не ответ, это комментарий квопрос. Это началось как ответ, пока я не понял, что вопрос не ясен, но к тому времени это было слишком долго для комментария.

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