我正试图找到模式(字母((数字(的字符串,并将它们作为(字母(-(数字(。例如:如果找到test001,则将其替换为test-001。所以,我需要把字符串从字母后面的第一位分开。我正在使用正则表达式"match"one_answers"split"函数。
if re.match(r'^D+d*$', str):
parts = re.split(r'(?=d)', str, 1)
updated_str = parts[0] + "-" + parts[1]
它适用于其他python版本,但在python 3.6版本中失败,引发错误:ValueError:split((需要一个非空的模式匹配有人能帮我实现同样的功能吗?它可以用于所有版本的python。
在Python 3.7之前,re.split
不允许在";可以匹配空字符串的模式";。
您可以使用单个re.sub
调用插入连字符:
import re
s = "test001"
print(re.sub(r'^(D+)(d+)$', r'1-2', s))
请参阅Python演示。
请注意,^(D+)(d*)$
也匹配像a:b
这样的字符串,末尾没有数字,所以您最终可以使用a:b-
字符串,这就是为什么我在d
之后使用+
的原因。
还要注意,D
匹配任何非数字字符。如果您真的只想匹配字母,您应该使用[a-zA-Z]
(如果您只需要支持ASCII字母(或[^Wd_]
来支持任何Unicode字母。