Лучший способ оптимизировать регулярное выражение зависит от внутренних компонентов движка регулярных выражений Mathematica, но я бы определенно избавился от (.|\\n)*
, как упоминал @Simon. Это не просто чередование - хотя почти всегда ошибочно иметь чередование, в котором каждая альтернатива соответствует ровно одному символу; для этого нужны классы персонажей. Но вы также захватываете каждый символ, когда вы соответствуете ему (из-за скобок), только чтобы выбросить его, когда вы соответствуете следующему символу.
Быстрое сканирование документов Mathematica regex не дает ничего похожего на модификатор /s
(Singleline или DOTALL), поэтому я рекомендую старый резервный JavaScript, [\\s\\S]*
- совпадать со всем, что является пробел или что-то, что не пробел. Также может помочь добавление якоря $
в конец регулярного выражения:
"(^|\\n)[^\\n]*MAGIC_STRING[\\s\\S]*$"
Но вашим лучшим вариантом, вероятно, было бы вообще не использовать регулярные выражения. Я не вижу здесь ничего, что требовало бы их, и, вероятно, было бы гораздо проще, а также более эффективно использовать обычные функции Mathematica для работы со строками.