2015-07-14 3 views
2

У меня есть строка, как это:Как написать регулярное выражение для использования в re.split питона

---------- 

FT Weekend 

---------- 

Why do we run marathons? 
Are marathons and cycling races about more than exercise? What does the 
literature of endurance tell us about our thirst for self-imposed hardship? 

Я хочу, чтобы удалить часть из ---------- к следующему ---------- включен.

Я использую re.sub:

pattern =r"-+\n.+\n-+" 
re.sub(pattern, '', thestring) 
+1

вы могли бы быть более точный – The6thSense

ответ

4
pattern =r"-+\n.+?\n-+" 
re.sub(pattern, '', thestring,flags=re.DOTALL) 

Просто используйте DOTALL flag.The проблемы с регулярным выражением было то, что по умолчанию . не соответствует \n Так что вам нужно явно добавить флаг DOTALL решений это соответствует \n.

См. Демонстрационную версию.

https://regex101.com/r/hR7tH4/24

или

pattern =r"-+\n[\s\S]+?\n-+" 
re.sub(pattern, '', thestring) 

если вы не хотите, чтобы добавить флаг,

+0

@stribizhev yups .make it non greedy – vks

0

Проблема с регулярным выражением (-+\n.+\n-+) является то, что . соответствует любому символу но строки, а что он слишком жадный (.+) и может охватывать несколько объектов -------.

Вы можете использовать следующее регулярное выражение:

pattern = r"(?s)-+\n.+?\n-+" 

(?s) Опция SingleLine делает . любой символ, включая символ новой строки. Шаблон .+? будет соответствовать 1 или более символам, но как можно меньше, чтобы соответствовать следующим .

См IDEONE demo

Для более глубокой очистки, я бы рекомендовал:

pattern = r"(?s)\s*-+\n.+?\n-+\s*" 

См another demo

+0

Не уверен, что у вас есть одинарные кавычки, или нет, я включил их в свое второе рекомендованное регулярное выражение. –

+0

Нет ни одной оговорки –

+0

Затем я обновил свой ответ, пожалуйста, проверьте. –

2

Ваше регулярное выражение не соответствует ожидаемой части, потому что .+ не захватывает новый линейный символ. Вы можете использовать re.DOTALL флаг принудительного ., чтобы соответствовать новой строке или re.S. вместо того, что Вы можете использовать отрицание класса символов:

>>> print re.sub(r"-+[^-]+-+", '', s) 
'' 

Why do we run marathons? 
Are marathons and cycling races about more than exercise? What does the 
literature of endurance tell us about our thirst for self-imposed hardship? 
>>> 

Или более точно вы можете сделать:

>>> print re.sub(r"-+[^-]+-+[^\w]+", '', s) 
'Why do we run marathons? 
Are marathons and cycling races about more than exercise? What does the 
literature of endurance tell us about our thirst for self-imposed hardship? 
>>> 
Смежные вопросы