Могу ли я использовать утверждение предпросмотра с помощью оператора или в регулярном выражении?

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

Вот пример строки отпечатка:

«[[Лондон]: Закончен в Ianuarie 1587, и 29 царствовавших Maiesties королевы, с полным продолжением прежних лет, для Иона Харисона, Джорджа Бишопа, Рэйфа Ньюбери, Генри Денхэма и Томаса ВВудкока. В Лондоне напечатано [ Генри Денхемом] на улице Олдерсгейт на улице Старре «

у меня есть регулярное выражение это будет соответствовать «Джону Харисону, Джорджу Бишопу, Рэйфу Ньюбери, Генри Денхэму и Томасу Вудкоку. В Лондоне» в приведенной выше строке.

Проблема в том, как регулярное выражение закодировано, оно будет соответствовать следующему предложению, потому что оно будет начинаться с заглавной буквы, которой будет соответствовать имя регулярное выражение. Также я не могу просто искать период, потому что может быть список инициалов: J.D., K.G., & V.X.

Строка название будет в основном соответствовать любому формату, в котором может быть имя.

имя будет совпадать: (Джон | Джон Дэй | Джон Уэйн Дэй | Джон-Дэй | JD | Джон | Дж. | JD | .JD | mcJohn Day), и каждое имя должно содержать заглавную букву, а имя может состоять из нескольких имена.

Вот текущий код:

string line = imprint_line;

string name("(\\s[a-z]*[A-Z\\.]+[a-z\\.:-]*)+");
regex reg("[Ff]or"+name+"((,|,?\\sand|\\s&)?"+name+")*");

smatch matches;

if (regex_search(line, matches, reg))
printedFor = matches[0];

я хочу измениться Редж смотреть вперед , или же а также или же & или же , а также

Я пытался что-то вроде этого:

regex reg("[Ff]or"+name+"(?=(,|,?\\sand|,?\\s&))"+name+")*");

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

Заранее спасибо за помощь.

0

Решение

Это ваше текущее регулярное выражение немного убрано.
Я не могу понять, зачем тебе нужно смотреть в будущее.
Можешь объяснить лучше?

 [Ff] or
(?: \s [a-z]* [A-Z.]+ [a-z.:-]* )+
(?:
(?: , | ,? \s and | \s & )?
(?: \s [a-z]* [A-Z.]+ [a-z.:-]* )+
)*

Вот ошибка, которую вы получаете

     [Ff] or
(?:
\s [a-z]* [A-Z.]+ [a-z.:-]*
)+
(?= , | ,? \s and | ,? \s & )
(?:
\s [a-z]* [A-Z.]+ [a-z.:-]*
)+
=    )  <-- Unbalanced  ')'
*
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]