Regex все что в кавычках

RegEx: присвоение значений между кавычками

У меня есть значение, подобное этому:

Что regex вернет значения, заключенные в кавычки (например, Foo Bar и Another Value )?

ОТВЕТЫ

Ответ 1

Я успешно использовал следующее:

Он также поддерживает вложенные кавычки.

Для тех, кто хочет получить более глубокое объяснение того, как это работает, здесь объяснение от пользователя ephemient:

([«»‘]) соответствует цитате; ((?=(\\?))\2.) если существует обратная косая черта, сожрать ее, и происходит ли это, соответствует ли символ; *? много раз встречаются (не жадно, чтобы не есть заключительную цитату); \1 соответствует той же цитате, которая использовалась для открытия.

Ответ 2

Это использует не-жадные *? оператора, чтобы захватить все до, но не включая следующую двойную кавычку. Затем вы используете механизм, специфичный для языка, для извлечения совпадающего текста.

В Python вы можете сделать:

Ответ 3

[^ «] является регулярным выражением для любого символа, кроме ‘«
Причина, по которой я использую это по отношению к не жадному многим операторам, заключается в том, что я должен постоянно следить за этим, чтобы убедиться, что я правильно понял.

Ответ 4

Давайте рассмотрим два эффективных способа, которые касаются экранированных кавычек. Эти шаблоны не предназначены для краткости и эстетики, но для эффективности.

Эти способы используют первое распознавание символов для быстрого поиска котировок в строке без затрат на чередование. (Идея состоит в том, чтобы быстро отбросить символы, которые не являются кавычками, без проверки двух ветвей чередования.)

Контент между кавычками описывается с помощью развернутого цикла (вместо повторного чередования), чтобы быть более эффективным: [^»\\]*(?:\\.[^»\\]*)*

Очевидно, что для обработки строк, которые не имеют сбалансированных кавычек, вместо этого вы можете использовать притяжательные кванторы: [^»\\]*+(?:\\.[^»\\]*)*+ или обходной путь для имитации их, чтобы предотвратить слишком много возврата. Вы также можете выбрать, что цитируемая часть может быть открывающей цитатой до следующей (неэкспертированной) цитаты или конца строки. В этом случае нет необходимости использовать притяжательные квантификаторы, вам нужно только сделать последнее предложение необязательным.

Обратите внимание: иногда кавычки не сбрасываются с помощью обратного слэша, но повторяя цитату. В этом случае подшаблон содержимого выглядит так: [^»]*(?:»»[^»]*)*

Шаблоны избегают использования группы захвата и обратной ссылки (я имею в виду что-то вроде ([«‘]). \1 ) и используют простое чередование, но с [«‘] в начале, в коэффициенте.

Perl вроде:

(обратите внимание, что (?s. ) является синтаксическим сахаром для включения режима dotall/singleline внутри группы, не содержащей захвата. Если этот синтаксис не поддерживается, вы можете легко включить этот режим для всего шаблона или заменить точку на [\s\S] )

(Способ написания этого шаблона полностью «ручным» и не учитывает возможные внутренние оптимизации двигателя)

ECMA script:

POSIX расширен:

Ответ 5

Очень поздний ответ, но хотелось бы ответить

Ответ 6

В частности, ни один из этих ответов не создает регулярное выражение, где возвращаемое совпадение является текстом внутри кавычек, и это то, о чем просят. MA-Madden пытается, но получает только внутренний матч как захваченную группу, а не весь матч. Один из способов сделать это:

Примеры этого можно увидеть в этой демонстрации https://regex101.com/r/Hbj8aP/1

Единственное другое осложнение состоит в том, что, поскольку lookahead фактически не потребляет конечную цитату, он будет снова найден с помощью начального lookbehind, который вызывает текст между окончанием и стартом кавычек в той же строке, которая должна быть сопоставлена. Помещение границы слова в открывающей цитате ( [«‘]\b ) помогает с этим, хотя в идеале я бы хотел пройти мимо взгляда, но я не думаю, что это возможно. Бит, позволяющий экранированным символам в середине я «Я взял прямо из ответа Адама.

Ответ 7

RegEx принятого ответа возвращает значения, включая их кавычки: «Foo Bar» и «Another Value» в качестве совпадений.

Вот RegEx, которые возвращают только значения между кавычками (как задавал вопрошающий):

Только двойные кавычки (используйте значение группы захвата # 1):

Одиночные кавычки (используйте значение группы захвата # 1):

Оба (используйте значение группы захвата # 2):

Все поддерживаемые экранированные и вложенные кавычки.

Ответ 8

управляет обратным трассировкой

Ответ 9

Образец ([«‘])(?:(?=(\\?))\2.)*?\1 выше выполняет эту работу, но я обеспокоен ее выступлениями (это неплохо, но может быть лучше). Шахта ниже нее

Шаблон «(.*?)» просто неполный. Мой совет для всех, кто это читает, просто НЕ ИСПОЛЬЗУЙТЕ ЭТО.

Например, он не может захватить много строк (при необходимости я могу предоставить исчерпывающий тестовый файл), как показано ниже:

$string = ‘Как дела? я \’ отлично, спасибо;

Остальные из них так же хороши, как и выше.

Если вы действительно заботитесь о производительности и точности, начните с ниже:

В моих тестах он охватывал каждую строку, которую я встретил, но если вы найдете что-то, что не работает, я бы с радостью обновил ее для вас.

Ответ 10

Мне понравилась Axeman более экспансивная версия, но у меня были проблемы с ней (она не соответствовала, например,

правильно, поэтому я попытался его исправить:

Ответ 11

просто попробуйте это, работает как шарм.

\ указывает символ пропуска

Ответ 12

БОЛЬШЕ ОТВЕТОВ! Вот решение, которое я использовал

TL;DR;
замените слово значок тем, что вы ищете в указанных цитатах и ​​вуаля!

Как это работает, он ищет ключевое слово и не заботится о том, что еще между кавычками. EG:
id=»fb-icon»
id=»icon-close»
id=»large-icon-close»
регулярное выражение ищет метку кавычки »
то он ищет любую возможную группу букв, которая не является »
пока не найдет icon
и любую возможную группу букв, которая не является »
он затем ищет закрытие «

Ответ 13

Мне понравилось решение Eugen Mihailescu для сопоставления содержимого между кавычками, позволяя избежать цитат. Однако я обнаружил некоторые проблемы с экранированием и придумал следующее регулярное выражение, чтобы исправить их:

Он делает трюк и все еще довольно прост и удобен в обслуживании.

Демо (с несколькими тестовыми примерами, не стесняйтесь использовать его и расширять).

PPS: Если вы сосредоточены исключительно на эффективности, обратитесь к решению Casimir et Hippolyte; это хороший.

Ответ 14

От Greg H. Я смог создать это регулярное выражение в соответствии с моими потребностями.

Мне нужно было сопоставить определенное значение, которое было квалифицировано, находясь внутри кавычек. Это должно быть полное совпадение, никакое частичное совпадение не должно приводить к удару

например. «test» не может соответствовать «test2».

Ответ 15

В отличие от ответа Адама, у меня есть простой, но проработавший:

И просто добавьте круглые скобки, если вы хотите получить контент в кавычках следующим образом:

Ответ 16

Здесь я показал строку результата между >

Ответ 17

Для меня это сработало:

Я использовал в таком предложении, как этот:

и он отлично работал.

Ответ 18

Если вы пытаетесь найти строки, содержащие только определенный суффикс, например синтаксис точек, вы можете попробовать следующее:

print(«this is something я need to return».localized + «so is this».localized + «but this is not»)

Ответ 19

Дополнительный ответ для подмножества кодеров Microsoft VBA только один использует библиотеку Microsoft VBScript Regular Expressions 5.5 и это дает следующий код

Источник

Шпаргалка по регулярным выражениям

Квантификаторы

КвантификаторАналогПримерОписание
?a?одно или ноль вхождений «а»
+a+одно или более вхождений «а»
*a*ноль или более вхождений «а»

Модификаторы

Символ «минус» (-) меред модификатором (за исключением U) создаёт его отрицание.

Спецсимволы

СпецсимволыАналогОписание
()подмаска, вложенное выражение
[]групповой символ
количество вхождений от «a» до «b»
|логическое «или», в случае с односимвольными альтернативами используйте []
\экранирование спец символа
.любой сивол, кроме перевода строки
\d2десятичная цифра
\D[^\d]любой символ, кроме десятичной цифры
\fконец (разрыв) страницы
\nперевод строки
\pLбуква в кодировке UTF-8 при использовании модификатора u
\rвозврат каретки
\s[ \t\v\r\n\f]пробельный символ
\S[^\s]любой символ, кроме промельного
\tтабуляция
\w[0-9a-z_]любая цифра, буква или знак подчеркивания
\W[^\w]любой символ, кроме цифры, буквы или знака подчеркивания
\vвертикальная табуляция

Спецсимволы внутри символьного класса

СпецсимволыПримерОписание
^[^da]отрицание, любой символ кроме «d» или «a»
[a-z]интервал, любой симво от «a» до «z»

Позиция внутри строки

Якоря

Якоря в регулярных выражениях указывают на начало или конец чего-либо. Например, строки или слова. Они представлены определенными символами. К примеру, шаблон, соответствующий строке, начинающейся с цифры, должен иметь следующий вид:

Здесь символ ^ обозначает начало строки. Без него шаблон соответствовал бы любой строке, содержащей цифру.

Символьные классы

Символьные классы в регулярных выражениях соответствуют сразу некоторому набору символов. Например, \d соответствует любой цифре от 0 до 9 включительно, \w соответствует буквам и цифрам, а \W — всем символам, кроме букв и цифр. Шаблон, идентифицирующий буквы, цифры и пробел, выглядит так:

POSIX

POSIX — это относительно новое дополнение семейства регулярных выражений. Идея, как и в случае с символьными классами, заключается в использовании сокращений, представляющих некоторую группу символов.

Утверждения

Поначалу практически у всех возникают трудности с пониманием утверждений, однако познакомившись с ними ближе, вы будете использовать их довольно часто. Утверждения предоставляют способ сказать: «я хочу найти в этом документе каждое слово, включающее букву “q”, за которой не следует “werty”».

Итак, парсер проверяет несколько следующих символов по предложенному шаблону ( werty ). Если они найдены, то утверждение ложно, а значит символ q будет «проигнорирован», т. е. не будет соответствовать шаблону. Если же werty не найдено, то утверждение верно, и с q все в порядке. Затем продолжается поиск любых символов, кроме пробела ( [^\s]* ).

Кванторы

Кванторы позволяют определить часть шаблона, которая должна повторяться несколько раз подряд. Например, если вы хотите выяснить, содержит ли документ строку из от 10 до 20 (включительно) букв «a», то можно использовать этот шаблон:

Этот шаблон соответствует тексту, заключенному в двойные кавычки. Однако, ваша исходная строка может быть вроде этой:

Приведенный выше шаблон найдет в этой строке вот такую подстроку:

Он оказался слишком жадным, захватив наибольший кусок текста, который смог.

Экранирование в регулярных выражениях

Знак экранирования, предшествующий символу вроде точки, заставляет парсер игнорировать его функцию и считать обычным символом. Есть несколько символов, требующих такого экранирования в большинстве шаблонов и языков. Вы можете найти их в правом нижнем углу шпаргалки («Мета-символы»).

Шаблон для нахождения точки таков:

Другие специальные символы в регулярных выражениях соответствуют необычным элементам в тексте. Переносы строки и табуляции, к примеру, могут быть набраны с клавиатуры, но вероятно собьют с толку языки программирования. Знак экранирования используется здесь для того, чтобы сообщить парсеру о необходимости считать следующий символ специальным, а не обычной буквой или цифрой.

Спецсимволы экранирования в регулярных выражениях

Подстановка строк

Подстановка строк подробно описана в следующем параграфе «Группы и диапазоны», однако здесь следует упомянуть о существовании «пассивных» групп. Это группы, игнорируемые при подстановке, что очень полезно, если вы хотите использовать в шаблоне условие «или», но не хотите, чтобы эта группа принимала участие в подстановке.

Группы и диапазоны

Группы и диапазоны очень-очень полезны. Вероятно, проще будет начать с диапазонов. Они позволяют указать набор подходящих символов. Например, чтобы проверить, содержит ли строка шестнадцатеричные цифры (от 0 до 9 и от A до F), следует использовать такой диапазон:

Чтобы проверить обратное, используйте отрицательный диапазон, который в нашем случае подходит под любой символ, кроме цифр от 0 до 9 и букв от A до F:

Группы наиболее часто применяются, когда в шаблоне необходимо условие «или»; когда нужно сослаться на часть шаблона из другой его части; а также при подстановке строк.

Использовать «или» очень просто: следующий шаблон ищет «ab» или «bc»:

Первым параметром будет примерно такой шаблон (возможно вам понадобятся несколько дополнительных символов для этой конкретной функции):

Он найдет любые вхождения слова «wish» вместе с предыдущим и следующим символами, если только это не буквы или цифры. Тогда ваша подстановка может быть такой:

Модификаторы шаблонов

Модификаторы шаблонов используются в нескольких языках, в частности, в Perl. Они позволяют изменить работу парсера. Например, модификатор i заставляет парсер игнорировать регистры.

Регулярные выражения в Perl обрамляются одним и тем же символом в начале и в конце. Это может быть любой символ (чаще используется «/»), и выглядит все таким образом:

Модификаторы добавляются в конец этой строки, вот так:

Мета-символы

Наконец, последняя часть таблицы содержит мета-символы. Это символы, имеющие специальное значение в регулярных выражениях. Так что если вы хотите использовать один из них как обычный символ, то его необходимо экранировать. Для проверки наличия скобки в тексте, используется такой шаблон:

Источник

RegEx: захват значений между кавычками

У меня есть значение, подобное этому:

Что regex вернет значения, заключенные в кавычки (например, Foo Bar и Another Value )?

19 ответов

Я успешно использовал следующее:

Он также поддерживает вложенные кавычки.

Для тех, кто хочет получить более глубокое объяснение того, как это работает, здесь объяснение от пользователя ephemient:

([«»‘]) соответствует цитате; ((?=(\\?))\2.) если существует обратная косая черта, сожрать ее, и происходит ли это, соответствует ли символ; *? много раз встречаются (не жадно, чтобы не есть заключительную цитату); \1 соответствует той же цитате, которая использовалась для открытия.

Это использует не-жадные *? оператора, чтобы захватить все до, но не включая следующую двойную кавычку. Затем вы используете механизм, специфичный для языка, для извлечения совпадающего текста.

В Python вы можете сделать:

[^ «] является регулярным выражением для любого символа, кроме ‘«
Причина, по которой я использую это по отношению к не жадному многим операторам, заключается в том, что я должен постоянно следить за этим, чтобы убедиться, что я правильно понял.

Давайте рассмотрим два эффективных способа, которые касаются экранированных кавычек. Эти шаблоны не предназначены для краткости и эстетики, но для эффективности.

Эти способы используют первое распознавание символов для быстрого поиска котировок в строке без затрат на чередование. (Идея состоит в том, чтобы быстро отбросить символы, которые не являются кавычками, без проверки двух ветвей чередования.)

Контент между кавычками описывается с помощью развернутого цикла (вместо повторного чередования), чтобы быть более эффективным: [^»\\]*(?:\\.[^»\\]*)*

Очевидно, что для обработки строк, которые не имеют сбалансированных кавычек, вместо этого вы можете использовать притяжательные кванторы: [^»\\]*+(?:\\.[^»\\]*)*+ или обходной путь для имитации их, чтобы предотвратить слишком много возврата. Вы также можете выбрать, что цитируемая часть может быть открывающей цитатой до следующей (неэкспертированной) цитаты или конца строки. В этом случае нет необходимости использовать притяжательные квантификаторы, вам нужно только сделать последнее предложение необязательным.

Обратите внимание: иногда кавычки не сбрасываются с помощью обратного слэша, но повторяя цитату. В этом случае подшаблон содержимого выглядит так: [^»]*(?:»»[^»]*)*

Шаблоны избегают использования группы захвата и обратной ссылки (я имею в виду что-то вроде ([«‘]). \1 ) и используют простое чередование, но с [«‘] в начале, в коэффициенте.

Perl вроде:

(обратите внимание, что (?s. ) является синтаксическим сахаром для включения режима dotall/singleline внутри группы, не содержащей захвата. Если этот синтаксис не поддерживается, вы можете легко включить этот режим для всего шаблона или заменить точку на [\s\S] )

(Способ написания этого шаблона полностью «ручным» и не учитывает возможные внутренние оптимизации двигателя)

Источник

Шпаргалка по регулярным выражениям

Квантификаторы

АналогПримерОписание
?a?одно или ноль вхождений «а»
+a+одно или более вхождений «а»
*a*ноль или более вхождений «а»

Модификаторы

Символ «минус» (-) меред модификатором (за исключением U) создаёт его отрицание.

Спецсимволы

АналогОписание
()подмаска, вложенное выражение
[]групповой символ
количество вхождений от «a» до «b»
|логическое «или», в случае с односимвольными альтернативами используйте []
\экранирование спец символа
.любой сивол, кроме перевода строки
\d3десятичная цифра
\D[^\d]любой символ, кроме десятичной цифры
\fконец (разрыв) страницы
\nперевод строки
\pLбуква в кодировке UTF-8 при использовании модификатора u
\rвозврат каретки
\s[ \t\v\r\n\f]пробельный символ
\S[^\s]любой символ, кроме промельного
\tтабуляция
\w[0-9a-z_]любая цифра, буква или знак подчеркивания
\W[^\w]любой символ, кроме цифры, буквы или знака подчеркивания
\vвертикальная табуляция

Спецсимволы внутри символьного класса

ПримерОписание
^[^da]отрицание, любой символ кроме «d» или «a»
[a-z]интервал, любой симво от «a» до «z»

Позиция внутри строки

Якоря

Якоря в регулярных выражениях указывают на начало или конец чего-либо. Например, строки или слова. Они представлены определенными символами. К примеру, шаблон, соответствующий строке, начинающейся с цифры, должен иметь следующий вид:

Здесь символ ^ обозначает начало строки. Без него шаблон соответствовал бы любой строке, содержащей цифру.

Символьные классы

Символьные классы в регулярных выражениях соответствуют сразу некоторому набору символов. Например, \d соответствует любой цифре от 0 до 9 включительно, \w соответствует буквам и цифрам, а \W — всем символам, кроме букв и цифр. Шаблон, идентифицирующий буквы, цифры и пробел, выглядит так:

POSIX

POSIX — это относительно новое дополнение семейства регулярных выражений. Идея, как и в случае с символьными классами, заключается в использовании сокращений, представляющих некоторую группу символов.

Утверждения

Поначалу практически у всех возникают трудности с пониманием утверждений, однако познакомившись с ними ближе, вы будете использовать их довольно часто. Утверждения предоставляют способ сказать: «я хочу найти в этом документе каждое слово, включающее букву “q”, за которой не следует “werty”».

Итак, парсер проверяет несколько следующих символов по предложенному шаблону ( werty ). Если они найдены, то утверждение ложно, а значит символ q будет «проигнорирован», т. е. не будет соответствовать шаблону. Если же werty не найдено, то утверждение верно, и с q все в порядке. Затем продолжается поиск любых символов, кроме пробела ( [^\s]* ).

Кванторы

Кванторы позволяют определить часть шаблона, которая должна повторяться несколько раз подряд. Например, если вы хотите выяснить, содержит ли документ строку из от 10 до 20 (включительно) букв «a», то можно использовать этот шаблон:

Этот шаблон соответствует тексту, заключенному в двойные кавычки. Однако, ваша исходная строка может быть вроде этой:

Приведенный выше шаблон найдет в этой строке вот такую подстроку:

Он оказался слишком жадным, захватив наибольший кусок текста, который смог.

Экранирование в регулярных выражениях

Знак экранирования, предшествующий символу вроде точки, заставляет парсер игнорировать его функцию и считать обычным символом. Есть несколько символов, требующих такого экранирования в большинстве шаблонов и языков. Вы можете найти их в правом нижнем углу шпаргалки («Мета-символы»).

Шаблон для нахождения точки таков:

Другие специальные символы в регулярных выражениях соответствуют необычным элементам в тексте. Переносы строки и табуляции, к примеру, могут быть набраны с клавиатуры, но вероятно собьют с толку языки программирования. Знак экранирования используется здесь для того, чтобы сообщить парсеру о необходимости считать следующий символ специальным, а не обычной буквой или цифрой.

Спецсимволы экранирования в регулярных выражениях

Подстановка строк

Подстановка строк подробно описана в следующем параграфе «Группы и диапазоны», однако здесь следует упомянуть о существовании «пассивных» групп. Это группы, игнорируемые при подстановке, что очень полезно, если вы хотите использовать в шаблоне условие «или», но не хотите, чтобы эта группа принимала участие в подстановке.

Группы и диапазоны

Группы и диапазоны очень-очень полезны. Вероятно, проще будет начать с диапазонов. Они позволяют указать набор подходящих символов. Например, чтобы проверить, содержит ли строка шестнадцатеричные цифры (от 0 до 9 и от A до F), следует использовать такой диапазон:

Чтобы проверить обратное, используйте отрицательный диапазон, который в нашем случае подходит под любой символ, кроме цифр от 0 до 9 и букв от A до F:

Группы наиболее часто применяются, когда в шаблоне необходимо условие «или»; когда нужно сослаться на часть шаблона из другой его части; а также при подстановке строк.

Использовать «или» очень просто: следующий шаблон ищет «ab» или «bc»:

Первым параметром будет примерно такой шаблон (возможно вам понадобятся несколько дополнительных символов для этой конкретной функции):

Он найдет любые вхождения слова «wish» вместе с предыдущим и следующим символами, если только это не буквы или цифры. Тогда ваша подстановка может быть такой:

Модификаторы шаблонов

Модификаторы шаблонов используются в нескольких языках, в частности, в Perl. Они позволяют изменить работу парсера. Например, модификатор i заставляет парсер игнорировать регистры.

Регулярные выражения в Perl обрамляются одним и тем же символом в начале и в конце. Это может быть любой символ (чаще используется «/»), и выглядит все таким образом:

Модификаторы добавляются в конец этой строки, вот так:

Мета-символы

Наконец, последняя часть таблицы содержит мета-символы. Это символы, имеющие специальное значение в регулярных выражениях. Так что если вы хотите использовать один из них как обычный символ, то его необходимо экранировать. Для проверки наличия скобки в тексте, используется такой шаблон:

Шпаргалка представляет собой общее руководство по шаблонам регулярных выражений без учета специфики какого-либо языка. Она представлена в виде таблицы, помещающейся на одном печатном листе формата A4. Создана под лицензией Creative Commons на базе шпаргалки, автором которой является Dave Child. Скачать в PDF, PNG.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *