2015-01-03 3 views
2

Я хочу разбить кусок текста, если есть строка, которая содержит только «----». Я использую метод re.split(..), но он не ведет себя так, как ожидалось. Что мне не хватает?Разделить строку в Python по определенной строке в тексте

import re 

s = """width:5 
---- 
This is a test sentence to test the width thing""" 

print re.split('^----$', s) 

это просто печатает

['width:5\n----\nThis is a test scentence to test the width thing'] 

ответ

3

Вы пропускаете MULTILINE flag:

print re.split(r'^----$', s, flags=re.MULTILINE) 

Без этого ^ и $ были применены ко всей s строки, а не к каждой строке в строка:

re.MULTILINE

Когда указано, шаблон символ «^» соответствует в начале строку и в начале каждой строки (сразу после каждой новой строки); и символ шаблона '$' совпадает в конце строки и в конце каждой строки (непосредственно предшествующей каждой новой строке ).

Демо:

>>> import re 
>>> 
>>> s = """width:5 
... ---- 
... This is a test sentence to test the width thing""" 
>>> 
>>> print re.split(r'^----$', s, flags=re.MULTILINE) 
['width:5\n', '\nThis is a test sentence to test the width thing'] 
0

Также вы можете не использовать ^ и $, потому что с ^ и $ вы указываете, что соответствует регулярному выражению двигателя от первой до конца строки, и использовать Positive look-around держать \n:

>>> print re.split('(?<=\n)----(?=\n)', s) 
['width:5\n', '\nThis is a test sentence to test the width thing'] 
+1

Что делать, если фактическая строка имеет '----' в середине? – thefourtheye

+0

@thefourtheye о, я пропустил '\ n', исправлено! – Kasramvd

+0

Зачем вам нужно «re' для этого разделения? Обычный раскол не будет делать? ;-) – thefourtheye

0

Другой способ разделения без использования регулярного выражения.

s.split("\n----\n") 
+0

Что делать, если строка заканчивается на '----' и без нового символа строки? – thefourtheye

+0

@ thefourtheye, OP размещен в вопросе о том, что строка будет содержать только '----' –

+0

Это то, что я делал раньше, и он не работал дураком, поэтому пошел со способом использования функция split из пакета 're' – Danish

0

меньше кода делает его идеальным, как и ожидалось:

В:

re.split('[\n-]+', s, re.MULTILINE) 

OUT:

['width:5', 'This is a test sentence to test the width thing'] 
0

Пробовали ли вы:

result = re.split("^----$", subject_text, 0, re.MULTILINE) 
Смежные вопросы