2015-03-24 3 views
0

Я хочу разбить нижнюю строку, чтобы получить каждое заявление отдельно, используя регулярное выражение.Как разбить строку, используя регулярное выражение

Входная строка:

str1 = "1. Write down what you eat for one week and you will lose weight. 2. Add 10 percent to the amount of daily calories you think you're eating. 3. Get an online weight loss buddy to lose more weight. 4. Get a mantra. 5. Eat three fewer bites of your meal, one less treat a day, or one less glass of orange juice. More items" 

Моя попытка:

re.split(r'[A-z]\.',str1) 

Выход:

['1. Write down what you eat for one week and you will lose weigh', " 
    2. Add 10 percent to the amount of daily calories you think you're eatin", 
    ' 3. Get an online weight loss buddy to lose more weigh', ' 
    4. Get a mantr', ' 5. Eat three fewer bites of your meal, one less treat a day, or one less glass of orange juic', ' More items'] 

В выходной я отсутствует последняя буква каждого оператора. Я хочу, чтобы выход был следующим:

['1. Запишите, что вы едите в течение одной недели, и вы потеряете вес t ', «2. Добавьте 10 процентов к количеству ежедневных калорий, которые вы считаете собой eatin g»,' 3. Получите онлайн-вес потеря дружище потерять больше веса т « „4. Получить mantr “,» 5. Ешьте три меньше укусов вашей еды, один менее лечения в день, или один меньше стакана апельсинового Juic е ',' Больше предметов ']

ответ

3

Причина этого заключается в том, что вы потребляете последние 2 символа, те же символы, на которых вы делитесь. Если вы не против потери ., то вы можете использовать, чтобы сохранить назад 'последнюю букву:

re.split(r'(?<=[a-z])\.',str1) 

Также, обратите внимание, что [A-z] не означает, что все письма, есть несколько символов, включенных в этот диапазон символов которые не являются буквами.

+0

Да, на самом деле, символы «[\]^_' »находятся между« Z »и« a ». –

2

Используйте положительный lookbehind, чтобы предыдущий ch aracter не расходуется:

re.split(r'(?<=[A-Za-z])\.',str1)

См https://docs.python.org/2/library/re.html:

(? < = ...) Соответствует, если текущему положению в строке предшествует совпадение для ..., которое заканчивается в текущей позиции.

+0

с осторожностью с 'Az' –

+0

@stribizhev И это больше не работает: https://regex101.com/r/sX5wH1/3 – Jerry

+0

ОК, я вижу -" [\]^_ '" находятся между ними - I обновил ответ :) –

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