У меня возникла проблема с тем, чтобы это регулярное выражение сопоставляло только те идентификаторы продуктов, которые начинаются с 1. Пока что я придумал именно такой шаблон.
def find_productID(report):
pattern = r'\d{4}-[A-Z][A-Z]-\d{2}' #enter the regex pattern here
result = re.findall(pattern, report) #enter the re method here
return result
print(find_productID("Products 1234-AB-30 and 2234-AB-30, not items 12-AB-30 or 12345-AB-30")) # Should return ['1234-AB-30']
print(find_productID("Products of interest are 1234-AB-30, 1678-XZ-11, and 1561-CD-57. We're not interested in other products like 2345-AB-29.")) # Should return ['1234-AB-30', '1678-XZ-11', '1561-CD-57']
r'\d{4}-[A-Z][A-Z]-\d{2}'.
На тот случай, если вы хотите избежать совпадений в более длинных строках, также используйте границы слов: r'\b1\d{3}-[A-Z]{2}-\d{2}\b'
@MichaelButscher, это будет соответствовать "1234-AB-30"
в "Products 91234-AB-30"
. Вам нужно либо сделать то, что предлагает Виктор, либо использовать негативный взгляд назад: r'(?<!\d)1\d{3}-[A-Z]{2}-\d{2}\b'
, выбор зависит от требований. Аналогичным образом вы можете использовать границу слова или отрицательный просмотр вперед в конце.
Вместо этого используйте этот шаблон, чтобы считать первую цифру 1:
r'1\d{3}-[A-Z][A-Z]-\d{2}'
Победитель победителя куриный ужин, спасибо!
Вы можете заменить
\d{4}
в начале регулярного выражения на1\d{3}