Mathematica StringReplace, чтобы заменить подстроку, содержащую новые строки - PullRequest
1 голос
/ 01 апреля 2009

У меня есть что-то вроде следующего в строке:

blah blah

BEGINIGNORE
   this stuff should get stripped out
ENDIGNORE

more stuff here

Я хотел бы сделать это (синтаксис perl): s / BEGINIGNORE. * ENDIGNORE // s, а именно - вырезать все между BEGINIGNORE и ENDIGNORE, включительно. Можно подумать, что в Mathematica это можно сделать следующим образом:

StringReplace[str, re["BEGINIGNORE[.\\s]*ENDIGNORE"]->""]

Но это не так. Как мне это сделать в Mathematica?

PS: я определяю следующий псевдоним: re = RegularExpression;

Ответы [ 4 ]

3 голосов
/ 01 апреля 2009

Оказывается, что по некоторым причинам "[.\\s]" и "[.\\n]" не работают, но "(.|\\n)" работает. Итак, следующие работы:

strip[s_String] := StringReplace[s, re@"BEGINIGNORE(.|\\n)*ENDIGNORE" -> ""]
1 голос
/ 25 мая 2010

Вставьте модификатор (?s) в регулярное выражение. Это эквивалентно модификатору /s в Perl и является частью стандартного синтаксиса PCRE .

StringReplace[str, re["BEGINIGNORE(?s).*ENDIGNORE"]->""]

Подробнее в этом ответе на связанный вопрос: Ошибка в Mathematica: регулярное выражение, примененное к очень длинной строке

1 голос
/ 01 апреля 2009

Попробуйте:

StringReplace[str, re["BEGINIGNORE(.|\\n)*ENDIGNORE"]->""]
0 голосов
/ 01 апреля 2009

По мере того как вы следите, вам нужно использовать вместо круглых скобок скобки вокруг выражения, которое вы хотели *.

Квадратные скобки определяют здесь класс символов, как в большинстве языков регулярных выражений. Вот почему [.\\s] работает не так, как вы ожидали, он обозначает набор символов, а не выражение в скобках. Может быть, использование Mathematica [] для выражений заставило вас задуматься в этом направлении?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...