正则表达式需求:按特定条件将方括号替换为大括号
解决方案
先明确要处理的两类方括号内容,其余纯描述的括号保持不变:
- 一类是以
["开头的内容(比如["Wanna Give My Love" by The Sons of Rainier]) - 另一类是包含双引号但不以
["开头的内容(比如[The Korgi's "Everybody's Got To Learn Sometime"])
分两次用正则替换
第一次:处理["开头的内容
查找规则:
\[("[\s\S]*?)\]
替换为:
{\1}
原理:
\[精准匹配左方括号("[\s\S]*?)捕获从"开始到右括号前的所有内容([\s\S]*?能匹配换行,非贪婪模式不会误抓多个括号)- 替换后把捕获的内容套进大括号里
第二次:处理含双引号但非["开头的内容
查找规则:
\[([^\["][\s\S]*?")\]
替换为:
{\1}
原理:
[^\["]确保开头不是"或[,排除掉第一类已经处理过的内容[\s\S]*?"捕获到结尾的双引号为止,保证只抓带引号的音乐条目- 同样替换成大括号包裹
关于你示例里第一个条目的特殊情况(多了playing)
如果只有这个条目需要追加playing,单独写个正则处理就行:
查找规则:
\[("Wanna Give My Love"\s+by The Sons of Rainier)\]
替换为:
{\1 playing}
替换后的最终效果和你给出的AFTER完全一致:
[Strained breathing] {"Wanna Give My Love" by The Sons of Rainier playing} [Mavrick blows a fart] {"Hallelujah" by The Sons of Rainer} [Victor over the phone] {The Korgi's "Everybody's Got To Learn Sometime"} [Lola chuckles] {"It's Good" by Jack Hammer} {Uno Hype's "Leave"}
内容的提问来源于stack exchange,提问作者Hank K
相关产品推荐
相关产品推荐

