Простой вопрос регулярных выражений. У меня есть строка в следующем формате:
this is a [sample] string with [some] special words. [another one]
Что такое регулярное выражение для извлечения слова в квадратных скобках, т.е.
sample
some
another one
Примечание. В моем случае использование скобок невозможно.
[^]]
быстрее, чем non-greedy (?
), а также работает с разновидностями regex, которые не поддерживают non-greedy. Тем не менее, не жадный выглядит лучше.[
]
из вывода (результат)?Будет захватывать контент без скобок
(?<=\[)
- позитивный взгляд за[
.*?
- не жадный матч по содержанию(?=\])
- позитивный взгляд на]
РЕДАКТИРОВАТЬ: для вложенных скобок следующее регулярное выражение должно работать:
источник
.
...Это должно сработать нормально:
источник
\[([^\[\]]*)\]
чтобы получить содержимое в самой внутренней скобке. Если вы посмотрите,lfjlksd [ded[ee]22]
то\[([^]]+)\]
получите,[ded[ee]
пока предложенное выражение вернется[ee]
. тестирование в ссылкеМогут ли скобки быть вложенными?
Если нет:
\[([^]]+)\]
соответствует одному элементу, включая квадратные скобки. Обратная ссылка\1
будет содержать элемент для сопоставления. Если ваш вкус регулярных выражений поддерживает lookaround, используйтеЭто будет соответствовать только элементу в скобках.
источник
/g
флага в JavaScript).Если вы не хотите включать скобки в соответствие, вот регулярное выражение:
(?<=\[).*?(?=\])
Давайте разберемся с этим
.
Соответствует любому символу , за исключением линии терминатора.?=
Является положительным опережением . Положительный взгляд находит строку, когда за ней следует определенная строка.?<=
Является положительным просмотром назад . Положительный взгляд сзади находит строку, когда ей предшествует определенная строка. Процитирую это ,Альтернатива
Если ваш движок регулярных выражений не поддерживает предпросмотры и взгляды, вы можете использовать регулярные выражения
\[(.*?)\]
для захвата внутренних скобок в группе, а затем при необходимости управлять группой.Как работает это регулярное выражение?
Скобки фиксируют символы в группе. Функция
.*?
получает все символы в скобках (кроме разделителей строк, если у вас неs
включен флаг) способом, который не является жадным.источник
(?<=\[).*?(?=\])
хорошо работает в соответствии с объяснением, приведенным выше. Вот пример Python:источник
[]
), а не скобок.На всякий случай, возможно, у вас были несбалансированные скобки , вы, вероятно, можете создать некоторое выражение с рекурсией, аналогичной
что, конечно, будет связано с языком или движком RegEx, который вы можете использовать.
RegEx Demo 1
Кроме этого,
RegEx Demo 2
или,
RegEx Demo 3
хорошие варианты для изучения.
Если вы хотите упростить / изменить / изучить выражение, это было объяснено на верхней правой панели regex101.com . Если вы хотите, вы также можете посмотреть в этой ссылке , как она будет сопоставляться с некоторыми примерами входных данных.
RegEx Circuit
jex.im визуализирует регулярные выражения:
Тестовое задание
Источник
Регулярное выражение для соответствия сбалансированным скобкам
источник
если вы хотите заполнить только маленькую букву алфавита между квадратной скобкой az
если хочешь маленькие заглавные буквы a-zA-Z
если вы хотите маленькие заглавные буквы и цифры буквы a-zA-Z0-9
если вы хотите все между квадратной скобкой
если вы хотите текст, число и символы
источник
Выше должно работать с учетом следующего объяснения
символы в квадратных скобках [] определяет класс символов, что означает, что шаблон должен соответствовать по крайней мере одному символу, указанному в квадратных скобках
\ s указывает пробел
+ означает по крайней мере один из символов, упомянутых ранее в +.
источник
A-Z
следует добавить в шаблон([[][a-zA-Z \s]+[]])
:; Я думаю, что это хороший способ, в то время как\
в шаблонах регулярных выражений, которые определяют строковые метки ("и") и смешивают новичков с помощью обратной косой черты в "или" использованиях!std::regex pattern{R"(["][a-zA-Z \s]+["])"};
Этот код будет извлекать содержимое в квадратных скобках и скобках
источник
В R попробуйте:
источник
gsub(pat, "\\1", x, perl=TRUE)
гдеpat
регулярное выражение, которое вы предоставили ..Чтобы сопоставить подстроку между первым
[
и последним]
, вы можете использоватьПосмотрите демонстрацию регулярных выражений и демонстрацию регулярных выражений # 2 .
Используйте следующие выражения для сопоставления строк в ближайших квадратных скобках :
Включая скобки:
\[[^][]*]
- PCRE, Pythonre
/regex
, .NET, Golang, POSIX (grep, sed, bash)\[[^\][]*]
- ECMAScript (JavaScript, C ++std::regex
, VBARegExp
)\[[^\]\[]*]
- Java регулярное выражение\[[^\]\[]*\]
- Onigmo (Ruby, требует экранирования скобок везде)Исключая скобки:
(?<=\[)[^][]*(?=])
- PCRE, Pythonre
/regex
, .NET (C # и т. Д.), ICU (Rstringr
), JGSoft Software\[([^][]*)]
- Bash , Golang - захватить содержимое между квадратными скобками с парой неэкранированных скобок, также смотрите ниже\[([^\][]*)]
- JavaScript , C ++std::regex
, VBARegExp
(?<=\[)[^\]\[]*(?=])
- Java регулярное выражение(?<=\[)[^\]\[]*(?=\])
- Onigmo (Ruby, требует экранирования скобок везде)ПРИМЕЧАНИЕ :
*
соответствует 0 или более символам, используйте+
для соответствия 1 или более, чтобы избежать совпадений с пустой строкой в результирующем списке / массиве.Всякий раз, когда доступны обе альтернативные поддержки, вышеупомянутые решения полагаются на них, чтобы исключить начальную / конечную скобку открытия / закрытия. В противном случае полагайтесь на группы захвата (предоставлены ссылки на наиболее распространенные решения на некоторых языках).
Если вам нужно сопоставить вложенные скобки , вы можете увидеть решения в регулярном выражении для соответствия потоку сбалансированных скобок и заменить круглые скобки квадратными, чтобы получить необходимую функциональность. Вы должны использовать группы захвата для доступа к содержимому, за исключением скобок открытия / закрытия:
\[((?:[^][]++|(?R))*)]
- PHP PCRE\[((?>[^][]+|(?<o>)\[|(?<-o>]))*)]
- .NET демо\[(?:[^\]\[]++|(\g<0>))*\]
- Демо Onigmo (Ruby)источник
Мне нужно было включить новые строки и в том числе скобки
\[[\s\S]+\]
источник