2015-09-26 1 views
4

Я пытаюсь очистить текстовые строки, используя раздел Python и регулярные выражения. Например:Строка раздела Python с регулярными выражениями

testString = 'Tre Bröders Väg 6 2tr' 
sep = '[0-9]tr' 
head,sep,tail = testString.partition(sep) 
head 
>>>'Tre Br\xc3\xb6ders V\xc3\xa4g 6 2tr' 

Голова все еще содержит 2TR, что я хочу, чтобы удалить. Я не так хорош с регулярным выражением, но не должен [0-9] сделать трюк?

Выход я бы ожидать от этого примера будет

head 
>>> 'Tre Br\xc3\xb6ders V\xc3\xa4g 6 
+0

Что вы ожидаете в качестве вывода? –

+0

Вы даже не используете regex здесь, почему '[0-9]' трюк тогда? –

+0

добавил вывод, который я ожидал бы – seb

ответ

2

str.partition не поддерживает регулярные выражения, поэтому, когда вы даете ему строку, как - '[0-9]tr', он пытается найти эту точную строку в testString к раздел на основе, он не использует никакого регулярного выражения.

Согласно documentation of str.partition -

разделить строку на первое вхождение сен, и возвращают 3-кортеж, содержащий часть перед сепаратором, самого сепаратора, и часть после сепаратора. Если разделитель не найден, верните 3-кортеж, содержащий строку, а затем две пустые строки.

И так как вы говорите, вы просто хотите head, вы можете использовать re.split() метод из re модуля с maxsplit установлен в 1, а затем взять его первый элемент, который должен быть эквивалентны тому, что вы пытаетесь с str.partition , Пример -

import re 
testString = 'Tre Bröders Väg 6 2tr' 
sep = '[0-9]tr' 
head = re.split(sep,testString,1)[0] 

Demo -

>>> import re 
>>> testString = 'Tre Bröders Väg 6 2tr' 
>>> sep = '[0-9]tr' 
>>> head = re.split(sep,testString,1)[0] 
>>> head 
'Tre Bröders Väg 6 ' 
+0

спасибо. это не произошло со мной вообще! – seb