Приклад: "Це просто \ n просте речення".
Я хочу відповідати кожному персонажу між "Це" і "речення". Розриви рядків слід ігнорувати. Я не можу зрозуміти правильний синтаксис.
Приклад: "Це просто \ n просте речення".
Я хочу відповідати кожному персонажу між "Це" і "речення". Розриви рядків слід ігнорувати. Я не можу зрозуміти правильний синтаксис.
Відповіді:
Наприклад
(?<=This is)(.*)(?=sentence)
Я використовував (?<=)погляд і заздалегідь дивлюся вперед, (?=)щоб "Це є" і "речення" не було включено в матч, але це залежить від вашого випадку використання, ви також можете просто написати 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, щоб відповідати перервам лінії
Зауважте, що в демонстраційній версії встановлено режим "розрив точок лінії" (aka) 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
У випадку, якщо хтось шукає приклад цього в контексті Дженкінса. Він аналізує 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
У піднесеному тексті ви просто пишете два слова, які ви хочете зберегти, наприклад, у вашому випадку воно є
"Це" і "речення"
і ви пишете. * між ними
тобто 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); `
Я приземлився сюди, на своєму пошуку regex, щоб перетворити цей синтаксис друку між print "string", в Python2 в старі сценарії з: print ("string"), для Python3. Добре працює, інакше використовуйте 2to3.py для додаткових перетворень. Ось моє рішення для інших:
Спробуйте це на Regexr.com (чомусь не працює в NP ++):
find: (?<=print)( ')(.*)(')
replace: ('$2')
для змінних:
(?<=print)( )(.*)(\n)
('$2')\n
для мітки та змінної:
(?<=print)( ')(.*)(',)(.*)(\n)
('$2',$4)\n
Як замінити всю "string" для друку в Python2 на print ("string") для Python3?
Це працювало для мене (я використовую код VS ):
для:
This is just\na simple sentence
Використання:
This .+ sentence
RegEx відповідатиме між двома рядками за допомогою підходу Java.
List<String> results = new ArrayList<>(); //For storing results
String example = "Code will save the world";
Для використання RegEx (. ?) * Будемо використовувати об’єкти Pattern і Matcher .
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.
}
Цей приклад буде містити лише слово "збереже" , але у більшому тексті він, ймовірно, знайде більше збігів.