我有一个大文件,几乎有100页,每行的开头是一个名称。我在正则表达式中使用JavaScript,问题是某些名称包含两个词,例如Alby's Mom
。
我要搜索的文本如下所示:
Alby: What is wrong?
Alby’s Mom: Nothing child.
Rick: Just tell him the truth!
Alby: Yeah. I think I deserve to know!
Little Blue Flower: (whisper) Don’t.
我需要选择所有名称(大约10个左右,这样就可以写下每个名称了)并列出如下列表:
Alby:
Alby's Mom:
Rick:
Alby:
Little Blue Flower:
我几乎可以用
(\bAlby\b|\bAlby's Mom\b|\bRick\b etc.....)+
但是问题在于,它不计算名称之间具有空格的名称,例如Alby的妈妈或Little Blue Flower。
我也不知道如何在名称末尾添加“:”,因为在名称之后立即将其添加到代码中将导致一直沿用的Alby之类的名称突然消失。我希望这是有道理的。
答案 0 :(得分:0)
尝试以下操作:sqlalchemy.exc.IntegrityError: (_mysql_exceptions.IntegrityError) (1062,
"Duplicate entry '...' for key 'hash'")
[SQL: 'INSERT INTO results (...) VALUES (...)'] [parameters: (...)]
(Background on this error at: http://sqlalche.me/e/gkpj)
说明:
^\s*[^:\n]+:
答案 1 :(得分:0)
要查找多行后跟冒号的名称,可以在名称之间\s+
来匹配一个或多个空白字符。
您可以使用替换,但是Alby's Mom
与\bAlby's Mom\b
不匹配的原因是因为字符'
和’
不同。如果要同时匹配它们,则可以使用字符类['’]
如果要匹配,可以在替换后添加冒号:
\b(?:Alby(?:['’]s\s+Mom)?|Rick|Little\s+Blue\s+Flower):
const regex = /\b(?:Alby(?:['’]s\s+Mom)?|Rick|Little\s+Blue\s+Flower):/g;
const str = `Alby: What is wrong?
Alby’s Mom: Nothing child.
Rick: Just tell him the truth!
Alby: Yeah. I think I deserve to know!
Little Blue Flower: (whisper) Don’t.
Alby’s
Mom:
This is a test Little
Blue Flower: test`;
let m;
while ((m = regex.exec(str)) !== null) {
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
console.log(m[0]);
}
答案 2 :(得分:-2)
使用可以使用/^.+?:/gm
示例here