2013-06-13 1 views
2

Я просто изучаю регулярные выражения, и я пытаюсь понять, как выполнить подстановку строк для набора символов в строке, а не для замены каждого символа (который является все, что я могу получить, чтобы произойти до сих порЗаменить раздел строки вместо символа Python

Допустим, у меня есть строка называется исходная строка:. «тест»

original_string = "(cats && dogs) || (cows && chickens)" 

Я хочу, чтобы заменить каждое слово в строке со строкой Мой желаемый результат будет выглядят так:

new_string = "(test && test) || (test && test)" 

До сих пор, мой код выглядит следующим образом:

replacement = "test" 
original_string = "(cats && dogs) || (cows && chickens)" 
new_string = re.sub(r'[^(,^),^&,^|]', replacement, original_string) 

Но это вызывает у каждого персонажа в кошек, собак, коров и кур, чтобы заменить «тест». Таким образом, результат выглядит так:

(testtesttesttesttest&&testtesttesttesttest)test||test(testtesttesttesttest&&testtesttesttesttesttesttesttesttest) 

Как я могу использовать регулярное выражение для получения желаемого результата?

+1

также обратите внимание, что вы не должны запятой-разделять символы в '[]'. например это должно быть '[abc]', а не '[a, b, c]'; '[^ (^)^&^|]', а не то, что у вас есть. – Claudiu

+0

Вы пытаетесь что-то сделать с кодом C++ (или похожим)? –

+0

Я создаю сиквел-инструкцию, основанную на пользовательском вводе. – jac300

ответ

2

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

replacement = "test" 
original_string = "(cats && dogs) || (cows && chickens)" 
new_string = re.sub(r'[a-z]+', replacement, original_string) 

[a-z]+ означает алфавит, появляющийся более чем 1 раз.

Хотя, сохраняя свой оригинальный регулярное выражение настолько, насколько это возможно, я хотел бы использовать это:

replacement = "test" 
original_string = "(cats && dogs) || (cows && chickens)" 
new_string = re.sub(r'[^()|& ]+', replacement, original_string) 

Вам не нужно повторять ^.

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