Эй, ребята, я довольно новичок в использовании regexp. Поэтому, пожалуйста, несите меня, если некоторые из моих вопросов очень просты. Мне нужно отфильтровать большой файл для некоторых данных. Часть файла данных выглядит следующим образомМногострочное регулярное выражение в matlab
<abcd.....z>
<xyz123....etc..etc/>
<xyz123....etc..etc/>
.
.
many more
.
<xyz123....etc..etc/>
</node>
<abcd.....z/>
<abcd.....z/>
<abcd.....z/>
<abcd.....z/>
<abcd.....z>
<xyz123....etc..etc/>
</node>
<abcd.....z/>
и эта картина повторяется несколько раз.
Мое требование состоит в том, чтобы получить первые <abcd.....z>
выше </node>
вместе с данными между ними (т. Е. Все <xyz123....etc..etc/>
).
Для например выхода 1:
<abcd.....z>
<xyz123....etc..etc/>
<xyz123....etc..etc/>
.
.
many more
.
<xyz123....etc..etc/>
выход 2:
<abcd.....z>
<xyz123....etc..etc/>
Я использовал этот положительный оператор взгляд вперед
<abcd.*?>(?=</node>)
Но главная проблема состоит в том, что выход включает <abcd.....z>
, которые не имеют <xyz123....etc..etc/>
под ними. т.е. выход следующим образом выхода 1:
<abcd.....z>
<xyz123....etc..etc>
<xyz123....etc..etc>
.
.
many more
.
<xyz123....etc..etc>
выход 2:
<abcd.....z/>
<abcd.....z/>
<abcd.....z/>
<abcd.....z/>
<abcd.....z>
<xyz123....etc..etc>
</node>
Если вы заметили на выходе 2 я не нужен первые 4 <abcd.....z/>
«с. Мне нужен только последний, т. Е. выход должен быть
<abcd.....z>
<xyz123....etc..etc>
Снова извините за длинный пост и надеюсь, что кто-то может мне помочь здесь!
Thnaks to @digitalLink У меня есть правильное выражение.
Это (<abcd\.*z>(.|\n)*?)(?=<\/node>)
Это прекрасно работает с онлайн-инструментами, такими как regexr и regexp101. Я заметил, что оба инструмента используют g-модификатор (глобальный модификатор) в конце выражения reg. Я понимаю, что флаг выражения/g повторно заполняет индекс последнего совпадения, позволяя итеративный поиск.
Возможно ли это в Matlab? Должен ли я использовать g-модификатор явно в matlab? Что такое эквивалентный флаг выражения в matlab
Не мог бы кто-нибудь помочь мне здесь. Я новичок в Matlab и не могу это понять!
Эй! спасибо за выражение. Когда я проверяю онлайн-инструменты, такие как regexr.com или regex101.com, он работает как шарм.Но когда я использую его в своей программе в Matlab, это не работает. Я заметил, что и regexr.com, и regexp101.com используют g-модификатор (глобальный модификатор) в конце выражения reg, которое вы поделили. Должен ли я использовать g-модификатор явно в Matlab? Если да, можете ли вы рассказать мне, как я могу это сделать? Еще раз спасибо –
Я понимаю, что флаг выражения/g заново заполняет индекс последнего совпадения, позволяя итеративный поиск. Возможно ли это в Matlab? если да, то какой эквивалентный флаг выражения в Matlab и как его можно использовать с выражением, которым вы поделились? –