Замяна на Regex със знаци с ударения - AutoHotKey

Срещнах проблем при използването на regex.replace с думи с ударения - използвам regex 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