18 de set de 2010 12:19 do Unikorn

Como você remove palavras entre parênteses em uma string usando o NSRegularExpression?

Eu não estou muito familiarizado com regex e, por isso, tenho conseguido que isso funcione com o NSRegularExpression da Apple

Estou tentando remover palavras entre parênteses ou colchetes ...

Por exemplo:

NSString * str = @ "Como você(remover palavras entre parênteses) dentro de uma string usando "

A string resultante deve ser: @ "Como você usa uma string em"

Te agradece!!!

questionAnswers (0)

18 de set de 2010 10:41 do 66.3k

Eu não seiobjectice-c sabor regex, mas no PCRE você pode:

s/\[.*?\]|\(.*?\)|\{.*?\}//g

Isso substituirá tudo entre parênteses ou colchetes por uma string vazia.

18 de set de 2010 10:34 do 251k

Procurar por

\([^()]*\)

e substitua por nada.

Como um regex detalhado:

\(      # match an opening parenthesis
[^()]*  # match any number of characters except parentheses
\)      # match a closing parenthesis

Isso funcionará bem se os parênteses estiverem corretamente equilibrados e não aninhados. Se os parênteses podem ser aninhados(like this (for example)), será necessário executar novamente a substituição até que não haja mais correspondências, pois apenas os parênteses mais internos serão correspondidos em cada execução. *

Para remover colchetes, faça o mesmo com\[[^[\]]*\]para aparelho\{[^{}]*\}.

Com expressões condicionais, você pode executar os três ao mesmo tempo, mas o regex parece feio, não é?

(?:(\()|(\[)|(\{))[^(){}[\]]*(?(1)\))(?(2)\])(?(3)\})

No entanto, não tenho certeza se NSRegularExpression pode lidar com condicionais. Provavelmente não. Explicação deste monstro:

(?:           # start of non-capturing group (needed for alternation)
 (\()         # Either match an opening paren and capture in backref #1
 |            # or
 (\[)         # match an opening bracket into backref #2
 |            # or
 (\{)         # match an opening brace into backref #3
)             # end of non-capturing group
[^(){}[\]]*   # match any number of non-paren/bracket/brace characters
(?(1)\))      # if capturing group #1 matched before, then match a closing parenthesis
(?(2)\])      # if #2 matched, match a closing bracket
(?(3)\})      # if #3 matched, match a closing brace.

*Você não pode combinar parênteses aninhados arbitrariamente (já que essas construções não são mais regulares) com expressões regulares, portanto isso não é uma limitação dessa regex em particular, mas de regexes em geral.

yourAnswerToTheQuestion