Member 13801408 Ответов: 2

[Решено] извлечение данных между известными строками с помощью шаблона регулярных выражений


Я хочу извлечь данные между двумя строками know.
образец 1 = [[
образец 2 = ]]

Мне нужны данные между первым вхождением паттерна1 и последним вхождением паттерна2

Data = [[jhsa,dgvfjhvfhl[[ks,dbfvhbf]]jmsaefvkjhera]]mhsdgvgcvds[[MSNDvcgsdv h]]<JSVDjhgs]]

Мой вывод : MSNDvcgsdv h]]<JSVDjhgs]]


Ожидаемый результат : [[jhsa,dgvfjhvfhl[[КС dbfvhbf]]jmsaefvkjhera]]mhsdgvgcvds[[MSNDvcgsdv ч]]&ЛТ;JSVDjhgs


пожалуйста, помогите мне с этим.

Заранее спасибо

Что я уже пробовал:

var Datamsg = регулярное выражение.Совпадение(Данные, @"\[\[(.*)\]\]", Регулярные Выражения.RightToLeft).Группы[1].Значение;

2 Ответов

Рейтинг:
2

BillWoodruff

Я ценю регулярное выражение; в этом случае довольно просто использовать строковые методы:

const string twoOpenBrackets = "[[";
const string twoCloseBrackets = "]]";

// in some method:

int ndx = data.IndexOf(twoOpenBrackets);

if(ndx < 0 || data == String.Empty) throw new ArgumentException("no [[");

data = data.Substring(ndx);

ndx = data.LastIndexOf(twoCloseBrackets);

if (ndx < 2) throw new ArgumentException("no ]]");

data = data.Substring(0, ndx);


Рейтинг:
18

Thomas Daniels

Проблема .*? в вашем регулярном выражении: ? означает "ленивый" и заставит регулярное выражение остановиться на первом ]] он попадается, но вы хотите последний.

Уберите знак вопроса (так замените .*? около .*), это сделает регулярное выражение "жадным" и потребит как можно больше.


BillWoodruff

+5