Пример: "Это просто простое предложение".
Я хочу сопоставить каждого символа между "Это" и "предложение". Разрывы строк следует игнорировать. Я не могу понять правильный синтаксис.
Пример: "Это просто простое предложение".
Я хочу сопоставить каждого символа между "Это" и "предложение". Разрывы строк следует игнорировать. Я не могу понять правильный синтаксис.
Например
(?<=This is)(.*)(?=sentence)
Я использовал lookbehind (?<=)
и смотрю вперед (?=)
, чтобы "Это" и "предложение" не были включены в совпадение, но это зависит от вашего прецедента, вы также можете просто написать This is(.*)sentence
.
Важно то, что вы активируете режим "dotall" вашего механизма регулярных выражений, чтобы .
соответствовал новой строке. Но как вы это делаете, зависит от вашего двигателя регулярных выражений.
Следующее, если вы используете .*
или .*?
. Первый из них жадный и будет соответствовать последнему "предложению" в вашей строке, второй - ленив и будет соответствовать до следующего "предложения" в вашей строке.
Обновление
This is(?s)(.*)sentence
Где (? s) включает модификатор dotall, делая .
совпадающим с символами новой строки.
Обновление 2:
(?<=is \()(.*?)(?=\s*\))
соответствует вашему примеру "Это (простое) предложение". См. Здесь Regexr
Воскрешая этот вопрос, потому что регулярное выражение в принятом ответе мне кажется не совсем правильным. Зачем? Поскольку
(?<=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)
Ссылка
Попробуйте This is[\s\S]*sentence
, работает в javascript
Это:
This is (.*?) sentence
работает в javascript.
используйте это: (?<=beginningstringname)(.*\n?)(?=endstringname)
Вы можете просто использовать это: \This is .*? \sentence
В случае, если кто-то ищет пример этого в контексте 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
и это должно сделать тебя хорошо
Вот как я это сделал:
Для меня это было проще, чем пытаться выяснить, какое именно выражение необходимо.
int indexPictureData = result.IndexOf("-PictureData:");
int indexIdentity = result.IndexOf("-Identity:");
string returnValue = result.Remove(indexPictureData + 13);
returnValue = returnValue + " [bytecoderemoved] " + result.Remove(0, indexIdentity); '
для быстрого поиска в VIM вы можете использовать в приглашении Vim Control:/Это. *\_. * предложение
Я попал сюда при поиске регулярного выражения для преобразования этого синтаксиса печати между 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?
Это сработало для меня (я использую VS Code):
for: 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";
Давайте использовать объекты 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.
}
Этот пример будет содержать только слово "сохранит", но в большем тексте он, вероятно, найдет больше совпадений.