我有一些带翻转括号的文本。例如,(text-in-parentheses)
我有)text-in-parentheses(
有没有简单的方法可以翻转文本中的所有括号?如果有,怎么做?
更新:这是一个纯文本文件,每个括号都翻转了。我使用的是 Windows 7。
答案1
电源外壳
简短版本
(Get-Content "in.txt" -raw) -replace "\(", "`0)" -replace "\)", "(" -replace "(`0\()", ")" >> "out.txt"
也可能:
Set-Content "out.txt" ((Get-Content "in.txt" -raw) -replace "\(", "`0)" -replace "\)", "(" -replace "(`0\()", ")")
- 阅读
in.txt
- 写入
out.txt
(在第一个代码示例中水平滚动才能看到行尾)
长版本
$in = "in.txt";
$out = "out.txt";
(Get-Content $in -raw) -replace "\(", "`0)" -replace "\)", "(" -replace "(`0\()", ")" >> $out
也可能:
Set-Content $out ((Get-Content $in -raw) -replace "\(", "`0)" -replace "\)", "(" -replace "(`0\()", ")")
解释
请暂时忽略神秘的反斜杠 - 它们仅适用于转义在正则表达式中具有特殊含义的括号。
我们首先用(
(NUL)
参见NUL 字符)。然后,我们用 替换每一个)
。(
最后一步,NUL(
被 重新替换)
。
使用这种方式,我们确保不会进行“双重替换”,例如:
Initial string value:
(test)
After replacing "(" by ")"
)test)
After replacing ")" by "("
(test(
警告
文件本身不能包含序列NUL)
。这会导致对我的 Powershell 脚本的误解,因为我使用 NUL 字符作为特殊指示符(例如,使用绿屏并穿着绿色的衣服)。
答案2
我确信有单步方法可以做到这一点,但一种快速的方法是将一个括号的全部切换为一个唯一字符,如 ^,然后将所有其他括号切换为正确的括号,然后将特殊字符切换为相反的括号。
例如在记事本中:
- 将所有 ( 替换为 ^
- 将所有 ) 替换为 (
- 将所有 ^ 替换为 )