【问题标题】:Keep only a specific portion that is between brackets and remove all the other ones仅保留括号之间的特定部分并删除所有其他部分
【发布时间】:2016-09-02 11:36:36
【问题描述】:

我想删除 [] 和 () 之间的所有内容

样品:
ST Action 第 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 of 2)。所以在最后一个例子中,应该是这样的:A Day at the Races (Disk 1 of 2)

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

【问题讨论】:

    标签: regex literals


    【解决方案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+[\])])

    【讨论】:

    • 当然效果很好,但对我来说有点太复杂了。没有更简单的方法吗(可能看起来更像我原来的正则表达式)?我似乎只理解“如果后缀不存在则匹配”部分,但我也无法让它发挥作用。
    • 也许您可以告诉我您使用的语言?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    相关资源
    最近更新 更多