2015-03-04 2 views
2

Я пытаюсь создать регулярное выражение, которое может занимать пространство - отделить все штрихи, находящиеся внутри скобок. Я придумал следующее:Замена символов в круглых скобках

regexprep(input, '(\w| +)-(\w+)(?=.*\))', '$1 - $2'); 

Однако, при выполнении строки (this-is-a-bigger-test), я получаю результат (this - is-a - bigger-test) вместо ожидаемого (this - is - a - bigger - test).

Что мне недостает в моей группировке для этого регулярного выражения?

+0

Как вы знаете, если его между скобка? – sln

ответ

2

Я думаю, что это делает то, что вы хотите:

str_out = regexprep(str_in, '(?<=\(.*)-(?=.*\))', ' - '); 

Он заменяет любой - что после ( и перед ) по -.

Как noted by @stribizhev, если тир уже может иметь один или несколько пробелов с каждой стороны, и вы хотите, чтобы каждый тир иметь ровно один пробел на каждой стороне, используйте

str_out = regexprep(str_in, '(?<=\(.*)\s*-\s*(?=.*\))', ' - '); 
+2

В случае "(this-is -a -bigger-test)" регулярное выражение нуждается в обновлении: '(? <= \ (. *) \ S * - \ s * (? =. * \))' , –

+0

@stribizhev Хорошо продуман! Но для '' (this-is -a-more-test) ''(двойное пространство перед' большим') это превратило бы двойное пространство в одно пространство. Не уверен, что это то, чего хочет OP –

+0

Спасибо за предложение @stribzhev (и спасибо OP за оригинальный ответ). Это решает мою проблему. – n0shadow

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