Пример: «Это просто \ na простое предложение».
Я хочу сопоставить каждый символ между «Это» и «предложение». Разрывы строк следует игнорировать. Я не могу понять правильный синтаксис.
Пример: «Это просто \ na простое предложение».
Я хочу сопоставить каждый символ между «Это» и «предложение». Разрывы строк следует игнорировать. Я не могу понять правильный синтаксис.
Ответы:
Например
(?<=This is)(.*)(?=sentence)
Я использовал lookbehind (?<=)и смотрю в будущее, (?=)чтобы «Это» и «предложение» не входили в соответствие, но это зависит от вашего варианта использования, вы также можете просто написать This is(.*)sentence.
Здесь важно то, что вы активируете режим «dotall» вашего движка регулярных выражений, чтобы .он соответствовал символу новой строки. Но как вы это сделаете, зависит от вашего движка регулярных выражений.
Следующая вещь, если вы используете .*или .*?. Первый из них жадный и будет соответствовать до последнего «предложения» в вашей строке, второй - ленивый и будет соответствовать до следующего «предложения» в вашей строке.
Обновить
This is(?s)(.*)sentence
Где (? S) включает модификатор dotall, .сопоставляя символы новой строки.
Обновление 2:
(?<=is \()(.*?)(?=\s*\))
соответствует вашему примеру "Это (простое) предложение". Смотрите здесь на Regexr
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 для соответствия через разрывы строк
Обратите внимание, что в демонстрационной версии «точка соответствует режиму разрыва строки» (он же), точка-все установлена (смотрите, как включить 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
Это сработало для меня (я использую VS Code ):
за:
This is just\na simple sentence
Использование:
This .+ sentence
В возвышенном тексте вы просто пишете два слова, которые вы хотите сохранить, например, в вашем случае это
«Это» и «предложение»
а ты пишешь. * между
т.е. This is .* sentence
и это должно сделать тебя хорошо
Вот как я это сделал:
для меня это было проще, чем пытаться выяснить необходимое регулярное выражение.
int indexPictureData = result.IndexOf("-PictureData:");
int indexIdentity = result.IndexOf("-Identity:");
string returnValue = result.Remove(indexPictureData + 13);
returnValue = returnValue + " [bytecoderemoved] " + result.Remove(0, indexIdentity); `
Я попал сюда при поиске регулярного выражения для преобразования этого синтаксиса печати между print "string" в Python2 в старых сценариях с: print ("string") для Python3. Работает хорошо, в противном случае используйте 2to3.py для дополнительных преобразований. Вот мое решение для других:
Попробуйте это на Regexr.com (по какой-то причине не работает в NP ++):
find: (?<=print)( ')(.*)(')
replace: ('$2')
для переменных:
(?<=print)( )(.*)(\n)
('$2')\n
для метки и переменной:
(?<=print)( ')(.*)(',)(.*)(\n)
('$2',$4)\n
Как заменить всю печатную «строку» в Python2 на печатную («строку») для Python3?
RegEx для сопоставления всего между двумя строками с использованием подхода Java.
List<String> results = new ArrayList<>(); //For storing results
String example = "Code will save the world";
Давайте использовать объекты Pattern и Matcher для использования RegEx (. ?) * .
Pattern p = Pattern.compile("Code "(.*?)" world"); //java.util.regex.Pattern;
Matcher m = p.matcher(example); //java.util.regex.Matcher;
Поскольку Matcher может содержать более одного совпадения, нам нужно перебрать результаты и сохранить их.
while(m.find()){ //Loop through all matches
results.add(m.group()); //Get value and store in collection.
}
Этот пример будет содержать только слово «сохранит» , но в большем тексте он, вероятно, найдет больше совпадений.