从文本中提取字母数字和数字+特殊字符



我正试图从文本中提取字母数字和数字的混合物。这两种类型的单词可能都有特殊的字符,比如"-"。文本示例如下。

text = 'This item is A12345, with serial no. 123 456 789 or 123456789, ref no. 876-543, code ABC-D-123.'

我得出了这样的结论:CCD_ 2。

但它返回:['A12345', '123', '456', '789', '123456789', '876', '543', '123']

预期输出为:['A12345', '123 456 789', '123456789', '876-543', 'ABC-D-123']

此外,项目A12345可以具有类似于12A34512345A的不同变体。这类似于参考号,其中'ABC-D-123'也可以是'ABC-FF-123-456''FF-123-456-AB'等。

edit:删除了代码中粗体输出的**,以避免混淆

edit2:将SKU修改为序列

根据您最近的编辑,以下regex模式似乎有效:

b[A-Z0-9]+(?:[ -][A-Z0-9]+)*b

这只是说,如果给定的匹配有多个单词,则用大写字母或数字(用空格或连字符分隔(匹配单词集合。

完整脚本:

text = 'This item is A12345, with serial no. 123 456 789 or 123456789, ref no. 876-543, code ABC-D-123.'
matches = re.findall(r'b[A-Z0-9]+(?:[ -][A-Z0-9]+)*b', text)
print(matches)

此打印:

['A12345', '123 456 789', '123456789', '876-543', 'ABC-D-123']

相关内容

最新更新