我正在编写一个程序来查找某本书的打印对象。我有一个印记行,我必须提取名称。请注意,每个印记行不包含X个人,这意味着该书可以为一个或多个人编写。
以下是印记行的示例:
“[[伦敦]:在Ianuarie 1587完成,以及29岁的Queenes Maiesties reigne,完全延续了前任,为Iohn Harison,George Bishop,Rafe Newberie,Henrie Denham和Thomas VVoodcocke。伦敦[由亨利·德纳姆]在Starre的signe的Aldersgate街上印刷,“
我有一个正则表达式,与上面一行中的“Iohn Harison,George Bishop,Rafe Newberie,Henrie Denham和Thomas Woodcock。在伦敦”相匹配。
问题是:正则表达式的编码方式将匹配下一句,因为它将以大写字母开头,后者将与名称正则表达式匹配。此外,我不能只搜索一段时间,因为可以有一个首字母列表:J.D。,K.G。,& V.X。
字符串名称基本上匹配名称可以包含的任何格式。
名称将匹配:( John | John Day | John Wayne Day | John-Day | JD | John | J. | 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];
我想将 reg 更改为预测,或和或& 或,和
我正在尝试这样的事情:
regex reg("[Ff]or"+name+"(?=(,|,?\\sand|,?\\s&))"+name+")*");
但这会返回正则表达式错误。有什么事我能做到吗?
提前感谢所有帮助。
答案 0 :(得分:1)
这是你当前的正则表达式清理了一下 我无法弄清楚为什么你需要前瞻 你能更好地解释一下吗?
[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 ')'
*