使用正则表达式分隔单词和数字

Tab*_*koj 2 python regex

我努力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].

Jvd*_*vdV 6

这可以使用数字的捕获组来解决问题吗?

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)被下划线替换。