2016-07-18 2 views
2

Я пытаюсь разобрать строки, используя регулярные выражения по этой схемеиспользование регулярных выражений в Python

TEXT1 (text2 500г ИЛИ кг text3) text4

пример

1.tomato (more 500g) 
2.potatoes (1 kg) 
3.potatoes (10 kg) onion 

Как я могу использовать re extract text1 + text4

1. tomato 
2. potatoes 
3. potatoes onion 
+0

Ваш пример, похоже, не соответствует тому, что вы просите, - вы отметили, что хотите text1 и text2, но в вашем примере # 3 отображается текст1 и текст4. Учитывая, что этот вопрос более ясен. –

ответ

0

Ответ ниже просто совпадает с текстом и извлекает подтексты, используя группы

Данные:

strings = ["1.tomato (more 500g)", 
"2.potatoes (1 kg)", 
"3.potatoes (10 kg) onion", 
"4.potatoes (10 abc) onion"] 

Написать функцию удобства:

def find_substrings(s): 
    #remove spaces for convenience 
    s = re.sub(" ", "", s) 

    #the regular expression 
    match = re.search("([\w\.]+)\([\w]+[kg]\)([\w]+)?", s) 

    #what to return when there is a match 
    if match: 
     return(" ".join([x for x in match.groups() if x])) 

Это дает результат:

In [6]: [find_substrings(x) for x in strings] 
Out[6]: ['1.tomato', '2.potatoes', '3.potatoes onion', None] 
+0

Спасибо. он работает, но выражение не должно совпадать, если внутри() не равно килограмму или g. Пример «4.potatoes (10 abc) onion» - нет соответствия –

+0

@AlexanderVedmed ', обязательно включите эти типы ограничений в свои вопросы;) Я добавил это условие в указанное выше регулярное выражение. –

Смежные вопросы