Регулярное выражение в виде слова, соответствующего предыдущему выражению в скобках

Можно ли использовать выражение Rebex lookbehind, чтобы сопоставить все слова, предшествующие всему, что находится в квадратных скобках, в данном примере сопоставить слова consectetur и libero?

Lorem Ipsum Dolor Sit Amet, Concetetur [Adipiscing] Elit. Nunc eu Tellus Vel Nunc Pretium Lacinia. Проин сед лорем. Cras sed ipsum. Nunc a libero [quis] risus sollicitudin imperdiet.

Я хочу отделить словарные записи в MS Word от содержимого записей. За записями следует фонетическая транскрипция в квадратных скобках, и как только они будут выбраны таким образом, я увеличу их шрифт и, таким образом, выделю их из остального текста и отделим от содержимого.

РЕДАКТИРОВАТЬ: выражение, которое дал Кент, прекрасно работает с однословными записями, например:

кипящий ['boilin] прил. 1. vreo, uzavreo, kipući 2. razjaren, uzrujan

с дефисами из двух слов, такими как:

точка кипения ['точка кипения] с vrelište

но первое слово фразовых глаголов и другие записи из двух слов не учитываются, что означает, что в таких записях, как:

выкинуть ['bault'aut] vt isključiti; izlanuti

матч закончился и не вылетел, как мне бы это понадобилось.

Поскольку это словарь, и я могу применить выражение регулярного выражения для каждого диапазона букв отдельно, я смог бы решить эту проблему, если бы у меня было регулярное выражение, которое будет искать первое слово, начинающееся с определенной буквы, которая предшествует скобкам, сопоставьте это слово и следующее за ним слово. Для записей "B", как в моих примерах, это будет означать, что выражение будет соответствовать отдельным словам, начинающимся с буквы B, дефисированные записи из двух слов в качестве точки кипения и совпадать с " bolt " в фразовых глаголах, таких как " bolt out" "вместе с предлогом, который следует за ним, то есть" в этом случае ".

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

РЕДАКТИРОВАТЬ 2: я ставлю разрывы абзаца перед квадратными скобками, и теперь у меня есть записи в конце предыдущей строки, например:

[aidwulf] s zool vrsta hijene (Proteles cristata) борода Арона

[earanzrod] Bot Divizma (Verbascum Thapsus) Abacca

[a'baid'on] vi biti na pomoći, stajati uz bok соблюдать

Борода Аарона - это запись для второй строки, начинающейся с квадратных скобок, Abacca - запись для третьей строки, начинающейся с квадратных скобок и так далее.

Чтобы решить мою проблему, мне нужно два регулярных выражения. Во-первых, мне нужно регулярное выражение, чтобы соответствовать каждой букве Aa в словах, начинающихся с Aa, и только в словах перед последним в каждой строке. В моих примерах это соответствовало бы A у Аарона в первом примере и a пребывало в третьем примере. Тогда я заменил бы это письмо звездочкой, чтобы получить * бороду Рона и * подождать с

Второе регулярное выражение будет соответствовать каждому последнему слову (включая составные дефисы из двух слов) в каждой строке и словам, которые начинаются с ранее созданной звездочки.

Спасибо вам за помощь.

1 ответ

Решение

Вам нужно смотреть вперед, а не смотреть назад

\w+(?=\s*\[[^]])

проверить с помощью grep:

kent$  echo "Lorem ipsum dolor sit amet, consectetur [adipiscing] elit. Nunc eu tellus vel nunc pretium lacinia. Proin sed lorem. Cras sed ipsum. Nunc a libero [quis] risus sollicitudin imperdiet."|grep -Po '\w+(?=\s*\[[^\]])'
consectetur
libero

РЕДАКТИРОВАТЬ

попробуйте это регулярное выражение:

[bB].+?(?=\s*\[[^]])

еще тест с grep:

kent$  cat file
boiling ['boilin] adj 1. vreo, uzavreo, kipući 2. razjaren, uzrujan
with hyphenated two-word entries such as:
boiling-point ['boilin point] s vrelište
but the first word of phrasal verbs and other two-word entries is left out, which means that in the entries such as:
bolt out ['bault'aut] vt isključiti; izlanuti

kent$  grep -oP '[bB].+?(?=\s*\[[^]])' file
boiling
boiling-point
bolt out
Другие вопросы по тегам