Динамическое регулярное выражение для сопоставления строки (строк), основанных на количестве символов, но без разделения строки - PullRequest
0 голосов
/ 08 января 2019

Пожалуйста, помогите мне решить мою проблему. Мне нужно создать динамическое регулярное выражение, чтобы соответствовать строке и разделить их по количеству символов, но не должно разделять любое слово. количество символов может быть 10 или 12 или 15. Я использую xslt в качестве своего ядра и буду использовать регулярные выражения только для этого сценария. Потому что, насколько я знаю, xslt не может этого сделать.

Я проводил тестирование регулярных выражений, прежде чем включить его в свой код xslt.

мой код xslt:

<xsl:variable name="NumOfChar" select="[NumOfCol]"/>

<xsl:choose>
  <xsl:when test="$NumOfCol = 10">
    <xsl:value-of select="[regex here]"/>
  </xsl:when>
  <xsl:when test="$NumOfCol = 15">
    <xsl:value-of select="[regex here]"/>
  </xsl:when>
  <xsl:otherwise>
    <xsl:value-of select="[regex here]"/>
  </xsl:otherwise>
</xsl:choose>

Я пробовал много регулярных выражений, но сейчас я сосредоточен на этом выражении:

\ Ь. {} * 1,10 * 1010

но проблема в том, что он не поймает слово с 10 или более символами. Это просто расколется.

ВХОД: (10 символов)

<p>
    <text>The latest international news</text>
</p>

ВЫХОД: (10 символов)

<p>
    <text>The latest</text>
    <text>international</text>
    <text>news</text>
</p>

ВХОД: (15 символов)

<p>
    <text>Comprehensive up-to-date news coverage</text>
</p>

ВЫХОД: (15 символов)

<p>
    <text>Comprehensive</text>
    <text>up-to-date news</text>
    <text>coverage</text>
</p>

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Вы можете использовать эту структуру шаблона для разделения строки:

Хотя это стиль XSLT 1.0, а также он не проверяет, является ли разделенная строка словом или нет.

Вы можете поделиться более подробной информацией о своем источнике, чтобы интегрировать регулярные выражения с xslt и получить более точный результат

<xsl:call-template name="splitSequence">
    <xsl:with-param name="input" select="your xpath to grab the string"/>
    <xsl:with-param name="length" select="'15'"/>
</xsl:call-template>

<xsl:template name="splitSequence">
    <xsl:param name="input" />
    <xsl:param name="length" />
    <xsl:value-of select="substring($input,1,$length)" /><xsl:value-of select="$newLine" />
    <xsl:if test="substring($input,$length+1)">
        <xsl:call-template name="splitSequence">
            <xsl:with-param name="input" select="substring($input,$length+1)" />
        </xsl:call-template>
    </xsl:if>
</xsl:template>
0 голосов
/ 08 января 2019

Я почти ничего не знаю о xslt, но следующее регулярное выражение выглядит так, как вам нужно.

\b.{1,10}\b|\b\S+\b который вы можете проверить здесь

Он разбивается на группы по 10 символов, за исключением длинных слов.

EDIT

Что касается большего количества разговоров и изменения в спецификации, то следующее регулярное выражение, использующее оглядывание назад и взгляд вперед, а не границы слов, позволит включать в совпадение специальные символы в соответствии с требованиями.

((?<=\s)|^).{1,10}((?<=\s)|$)|((?<=\s)|^)\S+((?=\s)|$) демо здесь

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