2010-08-18 5 views
3

Я новичок на этом сайте и новичок в Python.Функция регулярного выражения 'Split'

Так что я узнаю о регулярных выражениях, и я работал с примерами Google here.

я делал один из примеров «Поиск», но я изменил «Search» в «Split» и изменить шаблон поиска немного просто играть с ним, вот линия

print re.split(r'i', 'piiig') 

(уведомление что есть 3 'i в тексте' piiig ')

Выход имеет только 2 места, где он был разделен.

['p', '', '', 'gs'] 

Просто интересно, почему это дает этот результат. Это не проблема в реальной жизни и не имеет никакого отношения, но я думаю, что смогу с этим справиться позже и хочу знать, что происходит.

Кто-нибудь знает, что происходит ???

ответ

6

Вашего пример может иметь больше смысла, если заменить i с ,:

print re.split(r',', 'p,,,g') 

В этом случае есть четыре поля, найденные путем разбиения на запятую, 'p', 'g' и два пустых '' посередине.

+0

Спасибо, мужчина, теперь, когда я смотрю на него так, он делает его действительно тривиальным и полностью имеет смысл – KyleGraves

2

split удаляет экземпляр, который он находит. Две пустые строки - это две пустые строки между i с.

Если вы восстановили массив назад, используя i в качестве разделителя, вы получите исходную строку.

piiig, в этом отношении является p-i-i-i-g (здесь я использую тир для пустой строки)

0

Подумайте об этом так ... (в Java, как я не так хорошо в питоне)

String  Text  = "piiig"; 
List<String> Spliteds = new ArrayList<String>(); 
String  Match = ""; 
int I; 
char c; 
for (I = 0; I < Text.length; I++) { 
    c = Text.charAt(I); 
    if (c == 'i') { 
     Spliteds.add(Match); 
     Match = ""; 
    } else { 
     Match += c; 
    } 
} 
if (Match.length != 0) 
    Spliteds.add(Match);

Так что, когда вы запускаете ...

At the end of each loop: 
When: (I == 0) => c = 'p'; Match = "p"; Spliteds = {}; 
When: (I == 1) => c = 'i'; Match = ""; Spliteds = {"p"}; 
When: (I == 2) => c = 'i'; Match = ""; Spliteds = {"p", ""}; 
When: (I == 3) => c = 'i'; Match = ""; Spliteds = {"p", "", ""}; 
When: (I == 4) => c = 'g'; Match = "g"; Spliteds = {"p", "", ""}; 
At the end of the program: 
     (I == 4) => c = 'g'; Match = "g"; Spliteds = {"p", "", "", "g"};

движок регулярных выражений просто в найдите строку между «i», и это включает пустую строку между «i» сразу после другого «i».

Надеюсь, это поможет.

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