2013-06-10 12 views
1

Я пытаюсь изучить python и regex в то же время, и у меня возникли проблемы с поиском соответствия до конца строки и замены на лету.python regex и заменить

Итак, у меня есть строка, например, так:

ss="this_is_my_awesome_string/mysuperid=687y98jhAlsji" 

Что я хочу, чтобы сначала найти 687y98jhAlsji (я не знаю, что это содержание, прежде чем руки), а затем заменить его myreplacedstuff следующим образом:

ss="this_is_my_awesome_string/mysuperid=myreplacedstuff" 

в идеале я хотел бы сделать regex and replace сначала найти содержимое после mysuperid= (до конца строки), а затем выполнить .replace или .sub, если это имеет смысл.

Буду признателен за любые рекомендации по этому вопросу.

+0

Является ли 'ss 'URL? – Blender

ответ

6

Вы можете попробовать это:

re.sub(r'[^=]+$', 'myreplacedstuff', ss) 

Идея заключается в том, чтобы использовать класс символов, который исключает разделитель (здесь =) и закрепить шаблон с $

объяснение:

[^=] является символьным классом и означает все символы, которые не являются =
[^=]+ один или несколько символов из этого класса
$ конца строки

Поскольку регулярное выражение двигатель работает слева направо, только символы, которые не = в конце строк совпадают.

+0

Большое спасибо за это. Итак, '+ $' ищет конец строки? – AJW

+0

Нет только '$', '+' - квантификатор для '[^ =]', который означает 1 или более раз, в ближайшее время я отредактирую более подробное объяснение. –

+0

Большое спасибо за подробное объяснение - я, конечно, узнал здесь. Принял ваш ответ. – AJW

1

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

>>> import re 
>>> mymatch = re.search(r'mysuperid=(.*)', ss) 
>>> ss.replace(mymatch.group(1), 'replacing_stuff') 
'this_is_my_awesome_string/mysuperid=replacing_stuff' 

Вы, вероятно, следует использовать @ ответ Казимира, хотя. Он выглядит более чистым, и я не так хорошо разбираюсь в regex: p.

+0

Большое спасибо за альтернативное решение. Я согласен, ответ Казимира - это чистый лайнер. Я согласен - я стараюсь быть хорошим с регулярным выражением! Я в этом плохой! – AJW

+0

@JamesW Ну, вы не одиноки :) – TerryA

+1

вы должны больше узнать о регулярных выражениях на сайтах, таких как [курсы по MIT] (http://ocw.mit.edu/courses/electrical-engineering-and-computer-science /6-045j-automata-computability-and-complexity-spring-2011/lecture-notes/MIT6_045JS11_lec04.pdf), а также практикуйте на [tutorial sites] (http://regexone.com/). Я думаю, это помогает понять, что регулярные выражения являются «просто» автоматами с каббалистическими персонажами. В конце концов, это выражение гораздо менее сложное, чем большинство языков программирования .. но парадокс в том, что его труднее изучить :-) – zmo

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