Я не думаю, что свойство \L
regex поддерживается XPath. Ответ @Martin Honnen, вероятно, лучший, но вот полное решение XPath 2.0:
С:
dsfjkljsdfjlsjdfABCDdfsfsdff
XPath:
replace(replace("dsfjkljsdfjlsjdfABCDdfsfsdff","(\p{Lu})(\p{Lu}+)","$1___$2___"),"_{3}.+_{3}",lower-case(substring-before(substring-after(replace("dsfjkljsdfjlsjdfABCDdfsfsdff","(\p{Lu})(\p{Lu}+)","$1___$2___"),"___"),"___")))
Описание:
P1: Мы добавляем ___
, чтобы идентифицировать нижнюю часть с помощью:
replace("dsfjkljsdfjlsjdfABCDdfsfsdff","(\p{Lu})(\p{Lu}+)","$1___$2___")
P2: Мы генерируем нижнюю часть с помощью:
lower-case(substring-before(substring-after(resultofP1,"___"),"___"))
Мы присоединяемся к два предыдущих выражения с:
replace(resultofP1,"_{3}.+_{3}",resultofP2)
Вывод:
dsfjkljsdfjlsjdfAbcddfsfsdff