Возможно, вы захотите указать, в какой среде вы используете Regex. Могут быть различия в зависимости от того, что именно вы подразумеваете под «игнорированием» разрывов строк.
Я использовал lookbehind (?<=)и смотрю в будущее, (?=)чтобы «Это» и «предложение» не входили в соответствие, но это зависит от вашего варианта использования, вы также можете просто написать This is(.*)sentence.
Здесь важно то, что вы активируете режим «dotall» вашего движка регулярных выражений, чтобы .он соответствовал символу новой строки. Но как вы это сделаете, зависит от вашего движка регулярных выражений.
Следующая вещь, если вы используете .*или .*?. Первый из них жадный и будет соответствовать до последнего «предложения» в вашей строке, второй - ленивый и будет соответствовать до следующего «предложения» в вашей строке.
@ tchrist, прости, мне пришлось это посмотреть. Я правильно понимаю, и This is(?s)(.*)sentenceбудет работать?
Stema
@stema: Да, это должно работать, чтобы включить режим «точка все» в большинстве библиотек регулярных выражений.
tchrist
1
Это в основном решило мою проблему, но как мне включить символ пробела в свой шаблон? Я попробовал следующее: "(. *?) ())", Чтобы соответствовать ")" в конце последовательности, но это не сработало.
0xbadf00d
28
Только одно замечание - regexr говорит теперь, что lookbehind не поддерживается в javascript
Kovo
2
Есть ли способ справиться с повторными случаями этого разделения в блоке текста? Например: «Это просто \ na простое предложение. Вот некоторые дополнительные вещи. Это просто \ na простое предложение. А вот еще несколько вещей. Это просто \ na простое предложение.». В настоящее время он соответствует всей строке, а не каждому экземпляру.
Джадра
183
Нужен ленивый квантификатор
Воскрешение этого вопроса, потому что регулярное выражение в принятом ответе кажется мне не совсем правильным. Почему? Потому что
(?<=Thisis)(.*)(?=sentence)
будет соответствовать my first sentence. This is my secondвThis is my first sentence. This is my second sentence.
Вам нужен ленивый квантификатор между двумя взглядами. Добавление ?делает звезду ленивой.
Это соответствует тому, что вы хотите:
(?<=Thisis).*?(?=sentence)
Смотрите демо . Я удалил группу захвата, которая была не нужна.
Режим DOTALL для соответствия через разрывы строк
Обратите внимание, что в демонстрационной версии «точка соответствует режиму разрыва строки» (он же), точка-все установлена (смотрите, как включить DOTALL на разных языках ). Во многих разновидностях регулярных выражений вы можете установить его с помощью онлайн-модификатора (?s), превратив выражение в:
Вы правы насчет группы захвата. Не знаю, почему я это сделал. Но разница между .*и .*?объясняется также в моем ответе (абзац перед «Обновление»). Поэтому я не думаю, что мой ответ неверен.
Stema
2
@stema Извините за придирки, пока я читал вчера некоторые из ваших ответов, это единственный, который заставил меня дергаться. :) Я смягчила первую строку с is incorrectдо doesn't seem quite correct to me... Надеюсь, что это не заставляет вас дергаться, возможно, просто разница в восприятии того, каким должно быть выражение для такого большого трафика.
zx81
39
Попробуй This is[\s\S]*sentence, работает в javascript
Не знаю, почему все «за» проголосовали, это допускает разрывы строки 0-1, а разрыв строки должен быть непосредственно передendstringname
OGHaza
Я нашел полезным удалить начало строк журнала (отметка времени и т. Д.). Я использовал новую строку для начальной строки и «at» для конечной строки.
Стэн
2
В случае, если кто-то ищет пример этого в контексте Jenkins. Он анализирует build.log и, если он находит совпадение, он завершает сборку с совпадением.
Не уверен, что вопрос в том, как это сделать в Sublime Text, но в основном работает в Sublime Text. Это не работает, когда случается разрыв строки между «Это» и «предложение». Кроме того, возвышенный текст также выбирает «Это» и «Предложение», а не только текст между этими двумя строками.
Дилан Киннетт
0
Вот как я это сделал:
для меня это было проще, чем пытаться выяснить необходимое регулярное выражение.
Я попал сюда при поиске регулярного выражения для преобразования этого синтаксиса печати между print "string" в Python2 в старых сценариях с: print ("string") для Python3. Работает хорошо, в противном случае используйте 2to3.py для дополнительных преобразований. Вот мое решение для других:
Попробуйте это на Regexr.com (по какой-то причине не работает в NP ++):
Ответы:
Например
RegExr
Я использовал lookbehind
(?<=)
и смотрю в будущее,(?=)
чтобы «Это» и «предложение» не входили в соответствие, но это зависит от вашего варианта использования, вы также можете просто написатьThis is(.*)sentence
.Здесь важно то, что вы активируете режим «dotall» вашего движка регулярных выражений, чтобы
.
он соответствовал символу новой строки. Но как вы это сделаете, зависит от вашего движка регулярных выражений.Следующая вещь, если вы используете
.*
или.*?
. Первый из них жадный и будет соответствовать до последнего «предложения» в вашей строке, второй - ленивый и будет соответствовать до следующего «предложения» в вашей строке.Обновить
RegExr
Где (? S) включает модификатор dotall,
.
сопоставляя символы новой строки.Обновление 2:
соответствует вашему примеру "Это (простое) предложение". Смотрите здесь на Regexr
источник
This is(?s)(.*)sentence
будет работать?Нужен ленивый квантификатор
Воскрешение этого вопроса, потому что регулярное выражение в принятом ответе кажется мне не совсем правильным. Почему? Потому что
будет соответствовать
my first sentence. This is my second
вThis is my first sentence. This is my second sentence.
Смотрите демо .
Вам нужен ленивый квантификатор между двумя взглядами. Добавление
?
делает звезду ленивой.Это соответствует тому, что вы хотите:
Смотрите демо . Я удалил группу захвата, которая была не нужна.
Режим DOTALL для соответствия через разрывы строк
Обратите внимание, что в демонстрационной версии «точка соответствует режиму разрыва строки» (он же), точка-все установлена (смотрите, как включить DOTALL на разных языках ). Во многих разновидностях регулярных выражений вы можете установить его с помощью онлайн-модификатора
(?s)
, превратив выражение в:Ссылка
источник
.*
и.*?
объясняется также в моем ответе (абзац перед «Обновление»). Поэтому я не думаю, что мой ответ неверен.is incorrect
доdoesn't seem quite correct to me
... Надеюсь, что это не заставляет вас дергаться, возможно, просто разница в восприятии того, каким должно быть выражение для такого большого трафика.Попробуй
This is[\s\S]*sentence
, работает в javascriptисточник
[\s\S]*?
(также называется: не жадный шаблон)Эта:
работает в javascript.
источник
использовать этот:
(?<=beginningstringname)(.*\n?)(?=endstringname)
источник
endstringname
В случае, если кто-то ищет пример этого в контексте Jenkins. Он анализирует build.log и, если он находит совпадение, он завершает сборку с совпадением.
источник
Вы можете просто использовать это:
\This is .*? \sentence
источник
Это сработало для меня (я использую VS Code ):
за:
This is just\na simple sentence
Использование:
This .+ sentence
источник
Возвышенный текст 3x
В возвышенном тексте вы просто пишете два слова, которые вы хотите сохранить, например, в вашем случае это
«Это» и «предложение»
а ты пишешь. * между
т.е.
This is .* sentence
и это должно сделать тебя хорошо
источник
Вот как я это сделал:
для меня это было проще, чем пытаться выяснить необходимое регулярное выражение.
источник
для быстрого поиска в VIM вы можете использовать в приглашении Vim Control: / Это. * \ _. * предложение
источник
Я попал сюда при поиске регулярного выражения для преобразования этого синтаксиса печати между print "string" в Python2 в старых сценариях с: print ("string") для Python3. Работает хорошо, в противном случае используйте 2to3.py для дополнительных преобразований. Вот мое решение для других:
Попробуйте это на Regexr.com (по какой-то причине не работает в NP ++):
для переменных:
для метки и переменной:
Как заменить всю печатную «строку» в Python2 на печатную («строку») для Python3?
источник
RegEx для сопоставления всего между двумя строками с использованием подхода Java.
Давайте использовать объекты Pattern и Matcher для использования RegEx (. ?) * .
Поскольку Matcher может содержать более одного совпадения, нам нужно перебрать результаты и сохранить их.
Этот пример будет содержать только слово «сохранит» , но в большем тексте он, вероятно, найдет больше совпадений.
источник