为什么这个正则表达式替换中有额外的括号?
Why are there extra parenthesis in this regex substitution?
我的代码行如下所示:
self.request.sendall(some_string)
我想将它们替换成这样:
self.request.sendall(bytes(some_string, 'utf-8'))
这是我当前的 sed 命令:
sed -i "s/\.sendall\((.*)\)/\.sendall\(bytes\(, 'utf-8'\)\)/g" some_file.py
我很接近,但这是我得到的结果:
self.request.sendall(bytes((some_string), 'utf-8'))
我无法弄清楚组替换中多余的左括号和右括号是从哪里来的。有人看到了吗?转义的括号是字面的,需要在那里。 .* 周围的是要组成一个组,以便以后替换,但它们就像成为匹配文本的一部分。
你转义了一组错误的括号,你需要使用
sed -i "s/\.sendall(\(.*\))/.sendall(bytes(, 'utf-8'))/g" some_file.py
注意:您使用的正则表达式风格是 POSIX BRE,因此,
- 捕获组设置为
\(...\)
- 文字括号仅由
(
和 )
字符定义,没有转义符
- RHS 中的圆括号和点是多余的。
图案详情:
\.sendall(
- .sendall(
字符串
\(.*\)
- 第 1 组 (</code>):任意零个或多个字符</li>
<li><code>)
- 一个 )
字符
.sendall(bytes(, 'utf-8'))
- RHS,其中
指第 1 组值。
我的代码行如下所示:
self.request.sendall(some_string)
我想将它们替换成这样:
self.request.sendall(bytes(some_string, 'utf-8'))
这是我当前的 sed 命令:
sed -i "s/\.sendall\((.*)\)/\.sendall\(bytes\(, 'utf-8'\)\)/g" some_file.py
我很接近,但这是我得到的结果:
self.request.sendall(bytes((some_string), 'utf-8'))
我无法弄清楚组替换中多余的左括号和右括号是从哪里来的。有人看到了吗?转义的括号是字面的,需要在那里。 .* 周围的是要组成一个组,以便以后替换,但它们就像成为匹配文本的一部分。
你转义了一组错误的括号,你需要使用
sed -i "s/\.sendall(\(.*\))/.sendall(bytes(, 'utf-8'))/g" some_file.py
注意:您使用的正则表达式风格是 POSIX BRE,因此,
- 捕获组设置为
\(...\)
- 文字括号仅由
(
和)
字符定义,没有转义符 - RHS 中的圆括号和点是多余的。
图案详情:
\.sendall(
-.sendall(
字符串\(.*\)
- 第 1 组 (</code>):任意零个或多个字符</li> <li><code>)
- 一个)
字符.sendall(bytes(, 'utf-8'))
- RHS,其中指第 1 组值。