Я пишу программу, чтобы узнать, для кого была напечатана книга. Мне дана строка отпечатка, и я должен извлечь имена. Обратите внимание, что в каждой строке выходных данных не содержится 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+")*");
но это возвращает ошибку регулярного выражения. Есть ли способ, которым я могу это сделать?
Заранее спасибо за помощь.
Это ваше текущее регулярное выражение немного убрано.
Я не могу понять, зачем тебе нужно смотреть в будущее.
Можешь объяснить лучше?
[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 ')'
*
Других решений пока нет …