只保留括号之间的特定部分,并删除所有其他部分

时间:2016-05-07 12:33:16

标签: regex literals

我想删除[]和()

之间的所有内容

样品:
ST Action Issue 08(1988-12)(GollnerPublishing Ltd)
ST Magazine 070(1993-03)(La Terre du Milieu)(fr)
20000海底联赛(1988)(Coktel Vision)[cr Big 4]
比赛日(1989年)(队)(第1轮,共2册)[cr MCA]

我的正则表达式:[^a-zA-Z\s\d][\d-()A-Za-z\] ]+

它有效,唯一的问题是我需要保留这个:(磁盘1的2)。所以在最后一个例子中,这将是这样的:比赛的一天(磁盘1的2)

我找不到排除(Disk 1 of 2)的方法(即“不匹配”)并将其整合到整个表达式中。

1 个答案:

答案 0 :(得分:1)

您可以利用消极前瞻(?![([]Disk 1 of 2[\])])来避免匹配(Disk 1 of 2)[Disk 1 of 2]

(?![([]Disk 1 of 2[\])])(?:\([^()]*\)|\[[^\][]*])

请参阅regex demo

(?:\([^()]*\)|\[[^\][]*])部分匹配圆括号(圆括号)中不包含括号(\([^()]*\))或(|)的字符串,方括号内的字符串不包含方括号(\[[^\][]*])。

如果12是动态的,代表整数,请使用\d+(?![([]Disk \d+ of \d+[\])])