我努力foobar123
在一个单词和一个未知长度的数字之间用下划线分隔给定的字符串(结果:)foobar_123
。我尝试使用正则表达式来查找匹配项 r1(有效)。但在此之后,我不知道如何分离相应的匹配。
import re
x = "foobar123"
y = re.sub("[a-z]{1}\d{1}", "\1", x)
print(y) # Output: "fooba23"
Run Code Online (Sandbox Code Playgroud)
我认为应该使用 "\1" 来访问上一个匹配项。所以我试图用它自己替换找到的匹配,但这导致:fooba23。不应该是 foobar123。
提前致谢。
更新:
很抱歉上面代码中的错字,它应该[a-z]
不是[0-9]
.
这可以使用数字的捕获组来解决问题吗?
import re
x = "foobar123"
y = re.sub(r'(\d+)', r'_\1', x)
print(y)
Run Code Online (Sandbox Code Playgroud)
我使用原始字符串转义了反斜杠。你忘记在你身上做的事情=)
没有捕获组的有趣替代方法是使用count
参数re.sub
:
import re
x = "foobar123"
y = re.sub(r'(?=\d)', '_', x, 1)
print(y)
Run Code Online (Sandbox Code Playgroud)
该模式(?=\d)
返回所有位置后跟一个数字,但只有第一个(因此 1 count
)被下划线替换。