2016-12-08 2 views
2

Мне нужно совместить текст в тексте, который окружен двумя символами, в данном случае «и». Так предполагается, что вся строка:Regex: как совместить часть текста в двух символах, например. цитаты

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

Теперь, если я использую следующее регулярное выражение

(?<=‘)(.*?)(?=’) 

Это будет соответствовать

вы можете заботиться о моей кошки в то время как я отсутствую

и

да

Что делать, если я хочу, чтобы искать одного символа например «e» (совпадение в обеих цитируемых строках) или слово, например. «кошка» в этих двух группах? Как я могу это сделать? Я не могу понять, как заменить (. *?), Чтобы найти подстроку/символ в этих специальных кавычках.

+2

Можете ли вы объяснить пример «кошки». я не могу понять –

+0

@KeyurShah Если я хочу совместить слово cat, он должен соответствовать «cat» внутри подстроки, окруженной «», а не той, которая находится за ее пределами (см. мой обновленный пример). Так, другими словами, это будет соответствовать одному происхождению кошки, а не двух. – Midas

ответ

2

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

(?<=‘)([^’e]*(e)[^’]*)(?=’) 

или

(?<=‘)([^’c]*(?:(?:\Bc|c(?!at\b))[^’c]*)*\b(cat)\b[^’]*)(?=’) 
+0

Можете ли вы проверить, что не так с этим [regex101] (https://regex101.com/r/5l8lwg/1) –

+0

@KeyurShah: в этом случае ситуация отличается от того, что кавычки открытия и закрытия одинаковы. –

+0

@KeyurShah: Чтобы поймать всех кошек между одними кавычками, шаблон более сложный, так как вам нужно знать, какая из них является открывающей цитатой, а какая - закрывающая цитата (с использованием якорей '\ G' для обеспечения смежности между совпадениями): https://regex101.com/r/H802eu/1 –

Смежные вопросы