我正试图从文本中提取字母数字和数字的混合物。这两种类型的单词可能都有特殊的字符,比如"-"。文本示例如下。
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
可以具有类似于12A345
或12345A
的不同变体。这类似于参考号,其中'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']