Приклад: "Це просто \ 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.
}
Цей приклад буде містити лише слово "збереже" , але у більшому тексті він, ймовірно, знайде більше збігів.