正则表达式在第二部分找到字符串的第一部分?

时间:2016-05-31 14:37:18

标签: regex calibre

我试图编写一个在Caliber(python)中使用的正则表达式来查找标题中括号内的系列名称的电子书。我有一个自定义列,系列名称和标题用"〜"分隔,例如:

"The Series~The Book Title (The Series)"

最好的我可以在标题的括号中找到包含系列名称中至少一个字母的任何内容:

(.+)~.*[\(\1\)].*

我只想在第二部分末尾的括号中找到那些字符串的第一部分,它可以包含额外的信息。

感谢。

3 个答案:

答案 0 :(得分:0)

这适用于Notepad ++:

(.+)~[^\(]*\(\1\).*

我不确定它在python中是否会起作用,但正则表达式处理器通常非常相似,所以试试吧。

答案 1 :(得分:0)

你的正则表达式非常接近,你可以改变你的正则表达式并拥有它:

(.+?)~.*[([]\1[)\]].*

<强> Working demo

Regular expression visualization

这将匹配以下字符串:

The Series~The Book Title (The Series)
The Series~The Book Title [The Series]

但是,如果您只想将单词与paretheses匹配,那么您可以:

(.+?)~.*[(]\1[)].*
or
(.+?)~.*\(\1\).*

<强> Working demo

Regular expression visualization

答案 2 :(得分:0)

感谢您的建议。它们在python演示中完美运行但由于某些未知原因在Calibre中不起作用。似乎一个角色是捕获组中最匹配的角色。必须是Calibre使用的正则表达式系统的限制。