Пример: "Это просто простое предложение".
Я хочу сопоставить каждого символа между "Это" и "предложение". Разрывы строк следует игнорировать. Я не могу понять правильный синтаксис.
Например
(?<=This is)(.*)(?=sentence)
Я использовал lookbehind (?<=)
и смотрю вперед (?=)
, чтобы "Это" и "предложение" не были включены в совпадение, но это зависит от вашего прецедента, вы также можете просто написать This is(.*)sentence
.
Важно то, что вы активируете режим "dotall" вашего механизма регулярных выражений, чтобы .
соответствовал новой строке. Но как вы это делаете, зависит от вашего двигателя регулярных выражений.
Следующее, если вы используете .*
или .*?
. Первый из них жадный и будет соответствовать последнему "предложению" в вашей строке, второй - ленив и будет соответствовать до следующего "предложения" в вашей строке.
Обновление
This is(?s)(.*)sentence
Где (? s) включает модификатор dotall, делая .
совпадающим с символами новой строки.
Обновление 2:
(?<=is \()(.*?)(?=\s*\))
соответствует вашему примеру "Это (простое) предложение". См. Здесь Regexr
(?s)
работает.
This is(?s)(.*)sentence
будет работать?
Воскрешая этот вопрос, потому что регулярное выражение в принятом ответе мне кажется не совсем правильным. Зачем? Поскольку
(?<=This is)(.*)(?=sentence)
будет соответствовать my first sentence. This is my second
в This is my first sentence. This is my second sentence.
Вам нужен ленивый квантификатор между двумя поисковыми окнами. Добавление ?
делает звезду ленивой.
Это соответствует тому, что вы хотите:
(?<=This is).*?(?=sentence)
См. демонстрацию. Я удалил группу захвата, которая не нужна.
Режим DOTALL для соответствия разрыву строк
Обратите внимание, что в демонстрации установлен режим "точка соответствует разрыву строки" (a.k.a.) dot-all (см. как включить DOTALL на разных языках). Во многих вариантах регулярных выражений вы можете установить его с помощью онлайн-модификатора (?s)
, превратив выражение в:
(?s)(?<=This is).*?(?=sentence)
Ссылка
.*
.*?
Также объясняется в моем ответе (абзац перед «Обновлением»). Поэтому я не думаю, что мой ответ неверен.
is incorrect
чтобы doesn't seem quite correct to me
... Надеюсь, это не заставляет вас дергаться, возможно, просто разница в восприятии того, каким должно быть выражение для такого большого трафика. ,
Попробуйте This is[\s\S]*sentence
, работает в javascript
[\s\S]*?
(также называется: не жадный шаблон)
Это:
This is (.*?) sentence
работает в javascript.
используйте это: (?<=beginningstringname)(.*\n?)(?=endstringname)
endstringname
В случае, если кто-то ищет пример этого в контексте Jenkins. Он анализирует build.log и, если он находит совпадение, он завершает сборку с совпадением.
import java.util.regex.Matcher;
import java.util.regex.Pattern;
node{
stage("parse"){
def file = readFile 'build.log'
def regex = ~"(?s)(firstStringToUse(.*)secondStringToUse)"
Matcher match = regex.matcher(file)
match.find() {
capturedText = match.group(1)
error(capturedText)
}
}
}
Вы можете просто использовать это: \This is .*? \sentence
Я попал сюда при поиске регулярного выражения для преобразования этого синтаксиса печати между print "string" в Python2 в старых сценариях с: print ("string") для Python3. Работает хорошо, в противном случае используйте 2to3.py для дополнительных преобразований. Вот мое решение для других:
Попробуйте это на Regexr.com (по какой-то причине не работает в NP++):
find: (?<=print)( ')(.*)(')
replace: ('$2')
для переменных:
(?<=print)( )(.*)(\n)
('$2')\n
для метки и переменной:
(?<=print)( ')(.*)(',)(.*)(\n)
('$2',$4)\n
Как заменить всю строку "print" в Python2 на print ("string") для Python3?
для быстрого поиска в VIM вы можете использовать в приглашении Vim Control:/Это. *\_. * предложение
Вот как я это сделал:
Для меня это было проще, чем пытаться выяснить, какое именно выражение необходимо.
int indexPictureData = result.IndexOf("-PictureData:");
int indexIdentity = result.IndexOf("-Identity:");
string returnValue = result.Remove(indexPictureData + 13);
returnValue = returnValue + " [bytecoderemoved] " + result.Remove(0, indexIdentity); '
В возвышенном тексте вы просто пишете два слова, которые вы хотите сохранить, например, в вашем случае это
"Это" и "предложение"
а ты пишешь. * между
т.е. This is.* sentence
и это должно сделать тебя хорошо