Регулярное выражение в виде слова, соответствующего предыдущему выражению в скобках
Можно ли использовать выражение 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