Regex: удалить все после последнего подчеркивания

Основываясь на этом примере tei, target='example.com#ktu1-1_ii_l13b-14_tmġyn' я хотел бы удалить все до (и включая) # и все после (и включая) последнего _, первые два подчеркивания должны быть заменены на :. Я пытался:

<xsl:variable name="verb" select="replace(replace(tokenize (@target, '\s+')!substring-after(., '#'), '_', ':'), '.+:.+.:', '')"/>

Но это дает противоположный ожидаемому результат (tmġyn), когда ожидаемый результат должен быть ktu1-1:ii:l13b-14.

Заранее большое спасибо за вашу любезную помощь.


person Vanessa    schedule 16.07.2021    source источник
comment
Только что нашел правильный ответ (:[^:]*$) — дополнительную информацию см. ниже.   -  person Vanessa    schedule 17.07.2021


Ответы (2)


Я нашел его на основе этого ответа регулярное выражение для удаления всего после последней точки в файле: :[^:]*$. Так что работает идеально:

<xsl:variable name="verb" select="replace(replace(tokenize (@target, '\s+')!substring-after(., '#'), '_', ':'), ':[^:]*$', '')"/>
person Vanessa    schedule 16.07.2021

Используя XSLT (2.0 или выше), вы можете сделать:

<xsl:value-of select="tokenize(substring-after(@target, '#'), '_')[position() lt last()]" separator=":"/>
person michael.hor257k    schedule 16.07.2021