我可以在regex中使用带有or运算符的前瞻性断言吗
Can I use the lookahead assertion with an or operator in regex?
我正在编写一个程序来查找一本书是为谁打印的。我得到了一条印记线,我必须提取这些名字。请注意,每个印记行不包含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 ')'
*
相关文章:
- 将 OR 逻辑运算符从 C++ 转换为 Fortran
- C++重载|(按位OR)运算符,返回常数值
- 在 while 循环中使用字符串(OR 运算符)
- 按位 OR 运算符
- 带有逻辑 OR 运算符的 if 条件的缩写?
- C++ OR 运算符的未知行为
- 将逻辑 OR 与 cout 运算符一起使用
- 使用 OR 运算符赋值
- 我可以在regex中使用带有or运算符的前瞻性断言吗
- 在 C++ 中对字符串使用 OR 运算符
- 我在C++中使用删除运算符时遇到问题。我在运行时不断收到"double free or corruption (fasttop)"错误
- 逻辑 OR 和逗号运算符是否等效?
- 如果两者都会给出相同的结果,我应该更喜欢加法或逻辑 OR 运算符吗?
- 由于某种原因,使用 OR 运算符执行操作不起作用
- 我是否正确地将枚举值与C++的"or"运算符进行比较?
- 按位 AND/OR 运算符正在追加
- char端口上到java的运算符OR
- 为什么在c++中不应重载逗号、地址、逻辑AND和逻辑OR运算符
- 被C++逻辑OR(||)运算符混淆
- OR(||)运算符在C++中无法正常工作