我正在尝试提取字符串的数字和前后字符(不包括数字和空格)。该函数的预期返回是一个元组列表,每个元组具有以下形状:
(previous_sequence, number, next_sequence)
例如:
string = '200gr T34S'
my_func(string)
>>[('', '200', 'gr'), ('T', '34', 'S')]
我的第一次迭代是使用:
def my_func(string):
res_obj = re.findall(r'([^\d\s]+)?(\d+)([^\d\s]+)?', string)
但是当我传递像 '2AB3' 这样的字符串时,这个函数并没有达到我的预期我想输出 [('','2','AB') , ('AB','3','')] 而是显示 [('','2','AB'), ('','3',' ')],因为 'AB' 是先前输出的一部分。
我该如何解决这个问题?
请您参考如下方法:
由于没有重叠的数字,一个单一的尾随
断言应该是你所需要的。
类似于 ([^\d\s]+)?(\d+)(?=([^\d\s]+)?)
如果你关心这个([^\d\s]*)(\d+)(?=([^\d\s]*))
NULL和空字符串的区别。
