我可以在regex中使用带有or运算符的前瞻性断言吗

Can I use the lookahead assertion with an or operator in regex?

本文关键字:运算符 or 前瞻性 断言 regex 我可以      更新时间:2023-10-16

我正在编写一个程序来查找一本书是为谁打印的。我得到了一条印记线,我必须提取这些名字。请注意,每个印记行不包含X个数量的人,这意味着这本书可以为一个人或多个人写。

下面是一个压印线的例子:

"[[伦敦]:1587年完成于伊努阿里,由伊恩·哈里森、乔治·毕晓普、拉夫·纽贝里、亨利·德纳姆和托马斯·沃多科克统治的魁北克家族的29人统治,并完全延续了前一年。在伦敦,[由亨利·德纳姆]在奥尔德斯盖特街的斯塔尔签名处印刷,">

我有一个正则表达式,它将与上一行中的"Iohn Harison、George Bishop、Rafe Newberie、Henrie Denham和Thomas Woodcock.At London"相匹配。

问题是:regex的编码方式将与下一句匹配,因为它将以大写字母开头,并与名称regex匹配。此外,我不能只搜索一个句点,因为可以有一个缩写列表:J.D.、K.G.和amp;V.X.

字符串name将基本匹配名称可以采用的任何格式。

name将匹配:(John | John Day | John Wayne Day |约翰·戴| J.D.| John | J.| J.D |.J.D.| 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+")*");

但这会返回regex错误。有什么办法我能做到这一点吗?

提前感谢您的帮助。

这是您当前清理过的正则表达式
我不明白你为什么需要提前看
你能解释得更好吗?

[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  ')'
*