2017-02-22 20 views
0

Я не могу понять, как это сделать. Любая помощь будет оценена.Регулярное выражение для фильтрации товарной строки и номера модели (Python)

В основном я пытаюсь отфильтровать линейку продуктов и номер продукта из разнообразной строки. (Предполагая, что весь продукт линии будет предшествовать модель продукта и модель всегда будет содержать цифры)

Latitude E6430 (Latitude E6430) 
HP EliteBook 8460p (H3S08US#ABA) 
ThinkPad T60 

Мой ожидаемый результат:

Product line: Latitude 

Model: E6430 

Product line: EliteBook 

Model: 8460p 

Product line: ThinkPad 
Model: T60 

Благодаря передовой

+0

Любая попытка еще? – Rahul

+0

Зачем использовать Regex? –

+0

** модель всегда будет содержать числа **, противоречит себе в приведенных примерах (E6430, 8460p) – ZdaR

ответ

0

Я бы для следующего регулярного выражения с re.search

s= 'Latitude E6430 (Latitude E6430)' 
m = re.search('([a-zA-Z]+) ([a-zA-Z]*\d+[a-zA-Z]*)', s) 

А потом

m.group(1) # Latitude 
m.group(2) # E6430 

Объяснение регулярное выражение является

NODE      EXPLANATION 
-------------------------------------------------------------------------------- 
    (      group and capture to \1: 
-------------------------------------------------------------------------------- 
    [a-zA-Z]+    any character of: 'a' to 'z', 'A' to 'Z' 
          (1 or more times (matching the most 
          amount possible)) 
-------------------------------------------------------------------------------- 
)      end of \1 
-------------------------------------------------------------------------------- 
          ' ' 
-------------------------------------------------------------------------------- 
    (      group and capture to \2: 
-------------------------------------------------------------------------------- 
    [a-zA-Z]*    any character of: 'a' to 'z', 'A' to 'Z' 
          (0 or more times (matching the most 
          amount possible)) 
-------------------------------------------------------------------------------- 
    \d+      digits (0-9) (1 or more times (matching 
          the most amount possible)) 
-------------------------------------------------------------------------------- 
    [a-zA-Z]*    any character of: 'a' to 'z', 'A' to 'Z' 
          (0 or more times (matching the most 
          amount possible)) 
-------------------------------------------------------------------------------- 
)      end of \2 
+0

Я придумал схожие. Но это будет искать внутри '()' тоже, заканчивая повторяющимися результатами. [Demo] (https://regex101.com/r/MKtSE5/1) – Rahul

+0

@Rahul Вот почему я использую re.search и захватываю первую и вторую группу, чтобы избежать остальной части соответствия. –

+0

Ow! Python. Правильно !! Виноват. Извини ! – Rahul