Skip to main content
 首页 » 编程设计

python之使用正则表达式捕获括号中的文本(如果存在)

2024年08月29日28jiqing9006

现在我正在编写一个 python 脚本来解析当有人突出显示、做笔记或书签时由 kindle 生成的我的剪辑文件。我正在使用正则表达式从文件中收集数据,然后我计划将其存储在 sqlite 数据库中。不过现在,我无法匹配包含书名和可能是作者的行。

这条线有3种可能。它们可以采用以下格式:

Title (Last, First) 
Title (Author) 
Title 

我想要的是正则表达式捕获标题,以及结尾括号中的任何内容(如果存在),否则捕获一个空字符串。因此,例如,我希望这里的正则表达式给我结果:

('Title', 'Last, First') 
('Title', 'Author') 
('Title', '') 

现在我设法做了一个捕获括号的正则表达式,但没有捕获没有作者的标题。这是我现在拥有的:

(.+) (?:\((.+)\)(?:\n|\Z))* 

唯一的问题是它要求该行以作者结尾,如果我给它一个接受空白字符串的选项,它会发现整行都是没有作者的标题。即

('Title (Last, First)', '') 
('Title (Author)', '') 
('Title', '') 

请您参考如下方法:

如果你试图逐行匹配,你可以使用这个正则表达式:

^(.+?)(?: \((.+)\))?$ 

我添加了 start of line anchor 和 end of line anchor,然后将空格放在第一个非捕获组中,这样就可以捕获没有任何其他细节的标题。我将 * 运算符更改为 ?,因为我认为您不会有超过一对括号。如果您认为自己拥有更多,请改变。

我删除了第二个非捕获组,因为行尾 anchor 将确保它是行尾。

演示 here .