Как я могу удалить все содержимое в скобках, кроме полностью числового содержимого? - PullRequest
0 голосов
/ 03 августа 2011

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

[foo], [foo123bar] и [123bar] должны быть удалены

Но я хочу оставить без изменений любые скобки, состоящие только из цифр:

[1] и [123] должны остаться

Я попробовал пару вещей, но безрезультатно:

text = text.replace(/\[^[0-9+]\]/gi, "");

text = text.replace(/\[^[\d]\]/gi, "");

Ответы [ 3 ]

2 голосов
/ 04 августа 2011

Инструмент, который вы ищете - негативный взгляд . Вот как вы бы это использовали:

text = text.replace(/\[(?!\d+\])[^\[\]]+\]/g, "");

После того, как \[ обнаружит открывающую скобку, заглядывание, (?!\d+\]) утверждает, что скобки не содержат только цифры.

Затем [^\[\]]+ соответствует всему, что не является квадратными скобками, гарантируя (например), что вы не случайно совпадете с «вложенными» скобками, например [[123]].

Наконец, \] соответствует закрывающей скобке.

2 голосов
/ 03 августа 2011

Вам, вероятно, понадобится следующее:

text = text.replace(/\[[^\]]*[^0-9\]][^\]]*\]/gi, "");

Объяснение: вы хотите сохранить последовательности в скобках, которые содержат только чисел.Альтернативный способ сказать это - удалить те последовательности, которые 1) заключены в квадратные скобки, 2) не содержат закрывающей скобки и 3) содержат по крайней мере один нечисловой символ.Приведенное выше регулярное выражение соответствует открывающей скобке (\[), за которой следует произвольная последовательность символов, кроме закрывающей скобки ([^\]], обратите внимание, что закрывающую скобку нужно было экранировать), затем нечисловой символ (также исключаязакрывающая скобка), затем произвольная последовательность символов, кроме закрывающей скобки, затем закрывающая скобка.

0 голосов
/ 03 августа 2011

В питоне:

import re
text = '[foo] [foo123bar] [123bar] [foo123] [1] [123]'
print re.sub('(\[.*[^0-9]+\])|(\[[^0-9][^\]]*\])', '', text)
...