可否通过单次正则查找替换实现文件中所有括号的翻转?
解决方案
可以单次完成,具体实现方式取决于你使用的正则引擎支持能力:
- 支持回调替换的正则引擎(绝大多数编程语言内置的正则模块都支持该能力)
你只需要用正则匹配所有括号字符,再通过回调映射替换为对应翻转后的括号即可。
示例:- JavaScript 实现:
const raw = ")()()()()(" const result = raw.replace(/([(){}[\]])/g, match => ({ '(': ')', ')': '(', '{': '}', '}': '{', '[': ']', ']': '[' }[match]))- Python 实现:
import re bracket_map = {'(':')', ')':'(', '{':'}', '}':'{', '[':']', ']':'['} raw = ")()()()()(" result = re.sub(r'([(){}[\]])', lambda m: bracket_map[m.group()], raw) - 仅支持静态替换的正则引擎(部分文本编辑器的查找替换功能属于这类)
如果引擎支持条件替换语法,可以用下面的规则单次完成:
查找正则:(\()|(\))|(\{)|(\})|(\[)|(\])
替换规则:(?1\))(?2\()(?3\})(?4\{)(?5\])(?6\[)
原理是分别捕获6种括号,判断对应捕获分组存在时就输出翻转后的括号。
注意你原本使用的三次替换方案存在隐患:如果原始字符串中本身就包含你选的临时中转字符(比如你用的
\),会导致原有字符被误替换,单次替换方案不存在这个问题,安全性更高。
内容的提问来源于stack exchange,提问作者kesarling
相关产品推荐
相关产品推荐

