2016-05-07 92 views
1

我想刪除[]和之間的一切()只保留在括號內的特定部分,並刪除所有其他的人

樣品:
ST行動08期(1988年至1912年)(GollnerPublishing有限公司)
ST雜誌070(1993至1903年)(LA漁村杜環境)(FR)
20000聯盟在海(1988)(Coktel視覺)[CR大4]
甲天在賽(1989)(球隊)(Disk 1 of 2)[cr MCA]

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

它的工作原理,唯一的解決辦法就是我需要保留這個:(Disk 1 of 2)。因此,在最後一個例子中,這將是這樣的:在比賽中的一天(Disk 1 of 2)

我找不到排除(Disk 1 of 2)(即'不匹配')並將其整合的方法在整個表達中。

回答

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+[\])])

+0

它的偉大工程,當然,但有點太複雜了我。是不是有一個更簡單的方法來做到這一點(也許這將更像我的原始正則表達式)?我似乎只理解'匹配如果後綴不存在'部分,但是我無法讓它工作。 – ene

+0

也許你可以讓我知道你在使用它的語言? –

相關問題