Пример: «Это просто \ 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.
}
Этот пример будет содержать только слово «сохранит» , но в большем тексте он, вероятно, найдет больше совпадений.