re.split()函数引发Python 3.6版本的错误



我正试图找到模式(字母((数字(的字符串,并将它们作为(字母(-(数字(。例如:如果找到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字母。

相关内容

  • 没有找到相关文章

最新更新