2015-03-11 2 views
2

Я редактирую словарь и пытаюсь разместить каждое произношение тега [s]...[/s] после тега транскрипции [c darkslategray]...[/c]. Проблема в том, что не все слова содержат как произношение, так и транскрипцию.Регулярное соответствие многострочному тексту между двумя словами, включая слова

Вот мое текущее регулярное выражение и часть словаря:

(\s\[s\].*?\[\/s\]) 
(?s)(\s.*?\[c darkslategray\].*?\[\/c\]) 

Затем замените $2$1 для перемещения меток.

contrast 
[s]contra62.wav[/s] 
    [b]con·trast[/b] 
    [c blue][b]I[/b][/c] 
    [m1]({{<vr>}}[p]or[/p] [b]A[/b]{{</vr>}})[c darkslategray]/kənˈtræst, [i]Brit[/i] kənˈtrɑːst/[/c] [p]verb[/p] 
    [m2][b]1[/b] \[[p]no obj[/p]\] [b]:[/b] to be different especially in a way that is very obvious[/m] 
repellency 
[s]repell01.wav[/s] 
    [m1][b]re·pel·len·cy[/b] [c darkslategray]/rıˈpɛlənsi/[/c] [p]noun[/p] \[[p]noncount[/p]\][/m] 
    [m2][*][ex]a fabric known for its water [i]repellency[/i][/ex][/*][/m] 
labyrinth 
[s]labyri01.wav[/s] 
charge card 
    [m1][p]noun[/p], [p]pl[/p] [b]⋯ cards[/b] \[[p]count[/p]\] 
    [m2][b]:[/b] ↑<<credit card>>[/m] 
Antarctic 
[s]gganta10.wav[/s] 
    ↑<<antarctic>> 
ant 
[s]ant00001.wav[/s] 
    [m1][c darkslategray]/ˈænt/[/c] [p]noun[/p], [p]pl[/p] [b]ants[/b] \[[p]count[/p]\] 
    [m2][b]:[/b] a kind of small insect that lives in an organized social group[/m] 
    [m3][*][ex]a colony of [i]ants[/i] = an [i]ant[/i] colony[/ex][/*][/m] 
ring 
[s]ring0004.wav[/s] 

Regex101 Пример: https://regex101.com/r/cG3yK3/5

Как вы можете видеть, первые два матча в порядке, но третий матч не то, что я ищу. Он захватывает произношение одного слова и транскрипцию другого слова. Есть ли способ исправить это?

ответ

3

Вы должны иметь отрицательный внешний вид, чтобы убедиться, что ни один вложенный [s]...[/s] не соответствует. Используйте это регулярное выражение:

(\s\[s\].*?\[\/s\]) 
(?s)(\s(?:(?!\[s\].*?\[\/s\]).)*?\[c darkslategray\].*?\[\/c\]) 

Updated RegEx Demo

+1

работает как шарм. Спасибо огромное! – Systematis

+1

Добро пожаловать, рад, что все получилось. – anubhava

Смежные вопросы