Регулярное выражение для извлечения текста между квадратными скобками
Простой вопрос с регулярным выражением. У меня есть строка в следующем формате:
this is a [sample] string with [some] special words. [another one]
Что такое регулярное выражение для извлечения слов в квадратных скобках, т.е.
sample
some
another one
Примечание. В моем примере использования скобки не могут быть вложены.
Ответы
Ответ 1
Вы можете использовать следующее регулярное выражение глобально:
\[(.*?)\]
Пояснение:
-
\[
: [
является мета-символом char и должен быть экранирован, если вы хотите совместить его буквально.
-
(.*?)
: сопоставлять все неживым способом и захватывать его.
-
\]
: ]
является мета-символом char и должен быть экранирован, если вы хотите совместить его буквально.
Ответ 2
(?<=\[).+?(?=\])
Будет захватывать контент без скобок
-
(?<=\[)
- позитивный взгляд за [
-
.*?
- не жадный матч по содержанию
-
(?=\])
- позитивный взгляд на ]
РЕДАКТИРОВАТЬ: для вложенных скобок должно работать приведенное ниже регулярное выражение:
(\[(?:\[??[^\[]*?\]))
Ответ 3
Это должно работать нормально:
\[([^]]+)\]
Ответ 4
Могут ли скобки быть вложенными?
Если нет: \[([^]]+)\]
соответствует одному элементу, включая квадратные скобки. Backreference \1
будет содержать элемент, который будет соответствовать. Если ваш аромат регулярного выражения поддерживает поиск, используйте
(?<=\[)[^]]+(?=\])
Это будет соответствовать только элементу внутри скобок.
Ответ 5
(?<=\().*?(?=\))
работает хорошо в соответствии с приведенным выше объяснением. Вот пример Python:
import re
str = "Pagination.go('formPagination_bottom',2,'Page',true,'1',null,'2013')"
re.search('(?<=\().*?(?=\))', str).group()
"'formPagination_bottom',2,'Page',true,'1',null,'2013'"
Ответ 6
Если вы не хотите включать скобки в совпадение, используйте регулярное выражение: (?<=\[).*?(?=\])
Пусть разбить это
.
соответствует любому символу, кроме символов конца строки. ?=
Является положительным взглядом. Положительный взгляд находит строку, когда за ней следует определенная строка. ?<=
Это позитивный взгляд сзади. Положительный взгляд сзади находит строку, когда ей предшествует определенная строка. Процитирую это,
Смотри вперед позитивно (? =)
Найдите выражение A, за которым следует выражение B:
A(?=B)
Смотреть за положительным (? <=)
Найдите выражение A, где предшествует выражение B:
(?<=B)A
Альтернатива
Если ваш движок регулярных выражений не поддерживает предпросмотры и предпросмотры, то вы можете использовать регулярное выражение \[(.*?)\]
Для захвата внутренних скобок в группе, а затем при необходимости управлять группой.
Как работает это регулярное выражение?
Скобки фиксируют символы в группе. .*?
получает все символы в скобках (кроме разделителей строк, если у вас не включен флаг s
) способом, который не является жадным.
Ответ 7
([[][a-z \s]+[]])
Выше должно работать, учитывая следующее объяснение
-
символы в квадратных скобках [] определяет класс characte, который означает, что шаблон должен совпадать по крайней мере с одним символом, указанным в квадратных скобках
-
\ s указывает пробел
-
+ означает, что по крайней мере один из символов, упомянутых ранее, на +.
Ответ 8
Этот код будет извлекать содержимое между квадратными скобками и круглыми скобками
(?:(?<=\().+?(?=\))|(?<=\[).+?(?=\]))
(?: non capturing group
(?<=\().+?(?=\)) positive lookbehind and lookahead to extract the text between parentheses
| or
(?<=\[).+?(?=\]) positive lookbehind and lookahead to extract the text between square brackets
Ответ 9
В R попробуйте:
x <- 'foo[bar]baz'
str_replace(x, ".*?\\[(.*?)\\].*", "\\1")
[1] "bar"
Ответ 10
если вы хотите заполнить только маленькую букву алфавита между квадратными скобками a-z
(\[[a-z]*\])
если вы хотите маленькие буквы и заглавные буквы a-zA-Z
(\[[a-zA-Z]*\])
если вы хотите маленькие буквы и цифры a-zA-Z0-9
(\[[a-zA-Z0-9]*\])
если вы хотите все между квадратной скобкой
если вы хотите текст, число и символы
(\[.*\])
Ответ 11
Помните, что немногие ответы содержат регулярные выражения, которые используют lookbehinds, которые не будут работать в браузерах, таких как Firefox. Всегда проверяйте свое регулярное выражение здесь: regexr.com перед его использованием
Ответ 12
Вот как это можно сделать с помощью JS:
"this is a [sample] string with [some] special words. [another one]".replace(/\[(.*?)\]/gi, "$1")
Это производит следующую строку:
"this is a sample string with some special words. another one"