Регулярное выражение заменить символами с диакритическими знаками - AutoHotKey

Я столкнулся с проблемой использования regex.replace со словами с акцентом — я использую регулярное выражение replace, потому что мне нужно заменить полные, а не частичные строки (см. «grund» в списке).

Но AHK, кажется, игнорирует символы с диакритическими знаками в начале и конце слов (в середине все в порядке). Кто-нибудь сталкивался с этой проблемой раньше?

Я придумал следующее «исправление», добавив подчеркивание перед начальными акцентированными символами после после завершающих акцентированных символов, но это все еще не работает правильно, когда акцент появляется в слове (см. «mémit» и «mèmit»). Может ли кто-нибудь помочь? Я уверен, что есть гораздо более простой способ справиться с акцентами!

Ваше здоровье!

^+f2::
data =
(
testé = WORD1
kragén = WORD2
und = WORD3
gürtel = WORD4
émail = WORD5
élder = WORD7
messé = WORD8
émit = WORD9
èmit = WORD10
testè = WORD11
)
text =
(
testé kragén und gürtel émail nomâtch élder messé émit émit èmiter émita mémit mèmit testé testè grund
)


text := RegExReplace(text,"(\w+é)\W|$","$1_ ")
text := RegExReplace(text,"\W(é\w+)"," _$1")
text := RegExReplace(text,"(\w+è)\W|$","$1_ ")
text := RegExReplace(text,"\W(è\w+)"," _$1")


loop, parse, data, `n, `r
{
stringsplit, term, a_loopfield, =, %a_space%
text := RegExReplace(text, "\b" . term1 . "\b", term2)
}


stringreplace, text, text,  _, , all
stringreplace, text, text, _ , , all


msgbox, % text
return

person user3842077    schedule 22.10.2014    source источник


Ответы (2)


Вы должны иметь возможность сопоставлять символы Unicode, используя \p{L}:

([\p{L}\w]+)

Пример:

http://regex101.com/r/wD3wI1/1

person l'L'l    schedule 22.10.2014
comment
Спасибо, но это для скрипта поиска и замены, поэтому мне нужно точное совпадение каждого отдельного слова, а не всеобъемлющий код регулярного выражения. - person user3842077; 23.10.2014
comment
Для отдельного символа, такого как é, вы, вероятно, могли бы использовать \x(hex code of character) - ([\xE9]) и т. д. - person l'L'l; 23.10.2014

Мне удалось заставить его работать:

^+f2::
data =
(
testé = WORD1
kragén = WORD2
und = WORD3
gürtel = WORD4
émail = WORD5
élder = WORD7
messé = WORD8
émit = WORD9
èmit = WORD10
testè = WORD11
)

data := RegExReplace(data, "è", "00egrave")
data := RegExReplace(data, "é", "00eacute")
data := RegExReplace(data, "ü", "00uuml")

text =
(
testé kragén und gürtel émail nomâtch élder messé émit émit èmiter émita mémit mèmit testé testè grund
)

text := RegExReplace(text, "é", "00eacute")
text := RegExReplace(text, "ê", "00egrave")
text := RegExReplace(text, "ü", "00uuml")

loop, parse, data, `n, `r
{
stringsplit, term, a_loopfield, =, %a_space%
text := RegExReplace(text, "\b" . term1 . "\b", term2)
}

text := RegExReplace(text, "00egrave", "è")
text := RegExReplace(text, "00eacute", "é")
text := RegExReplace(text, "00uuml", "ü")

msgbox, % text
return
person user3842077    schedule 22.10.2014