Как вы удаляете скобки слова в строке, используя NSRegularExpression? - PullRequest
2 голосов
/ 18 сентября 2010

Я не слишком знаком с регулярным выражением, и поэтому у меня есть некоторые способы заставить это работать с Apple NSRegularExpression

Я пытаюсь удалить слова в скобках или скобках ...

Например:

NSString * str = @ "Как вы (удалите слова в скобках) внутри строки, используя"

результирующая строка должна быть: @ "Как вы внутри строки используете"

Спасибо тебе !!!

Ответы [ 2 ]

5 голосов
/ 18 сентября 2010

Поиск

\([^()]*\)

и заменить ничем.

В качестве подробного регулярного выражения:

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

Это будет работать нормально, если круглые скобки правильно сбалансированы и неопубликованы. Если круглые скобки могут быть вложены (like this (for example)), то вам нужно перезапустить замену до тех пор, пока больше не будет совпадений, так как только самые внутренние круглые скобки будут сопоставляться при каждом запуске. *

Чтобы снять скобки, проделайте то же самое с \[[^[\]]*\] для скобок \{[^{}]*\}.

С помощью условных выражений вы можете сделать все три сразу, но регулярное выражение выглядит ужасно, не так ли?

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

Однако я не уверен, что NSRegularExpression может обрабатывать условные выражения. Возможно нет. Объяснение этого монстра:

(?:           # 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.

* Вы не можете сопоставить произвольно вложенные скобки (поскольку эти конструкции больше не являются регулярными) с регулярными выражениями, так что это не ограничение данного регулярного выражения в частности, но регулярных выражений в целом.

2 голосов
/ 18 сентября 2010

Я не знаю, objectice-c регулярное выражение, но в PCRE вы можете сделать:

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

Это заменит все, что в скобках или скобках, на пустую строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...