У меня есть следующее выражение: regex и sample:
Как вы видите, это соответствует первому "лету". Я хочу, чтобы шаблон совпал на одной строке (второй "yo") с "cut me".
Как я могу убедиться, что соответствие регулярного выражения находится только в одной строке?
Вывод:
Hi
Ожидаемый результат (это то, что я действительно хочу):
Hi
yo keep this here
Keep this here
Удалите флаг s
или DOTALL
и измените ваше регулярное выражение на следующее:
^.*?((\yo\b.*?(cut me:)[\s\S]*))
С DOTALL
флагом DOTALL
.
будет соответствовать символам новых строки, так что ваш матч может охватывать несколько линий, включая линию до yo
или между yo
и cut me
. Удалив этот флаг, вы можете убедиться, что вы только сопоставляете строку с yo
и cut me
, а затем измените .*
В конце на [\s\S]*
который будет соответствовать любому символу, включая символы новой строки, чтобы вы могли соответствовать конец строки.
edit: Обратите внимание, что это требует немного другого подхода, чем другой ответ, это будет соответствовать части строки, которую вы хотите удалить, чтобы вы могли заменить эту часть пустой строкой, чтобы удалить ее.
Вы можете использовать это регулярное выражение с флагом s
(DOTALL) regex:
^.*?(?=yo\b[^\n]*cut me:)
yo\b[^\n]*cut me:
lookahead pattern, который гарантирует, что yo
с границей слова и cut me:
совпадают в одной строке.