Извлечь подстроку с помощью Regex - PullRequest
0 голосов
/ 17 марта 2019

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

Строка строится из столбцов строк, и мне нужен только 4-й столбец

string stringToExtractFrom = "289  120 00001110 ?? 
4Control@SimApi@@QAEAAV01@ABV01@@Z = ??4Control@SimApi@@QAEAAV01@ABV01@@Z 
(public: class SimApi::Control & __thiscall SimApi::Control::operator=(class 
SimApi::Control const &))"
string pattern = @"\s+\d+\s+\d+\s+\S+\s(.*)\=";
RegexOptions options = RegexOptions.Multiline;

Regex regX = new Regex(pattern, options);
Match m = regX.Match(stringToExtractFrom);

while (m.Success)
{                       

 Group g = m.Groups[1];
 defData += g+"\n";
 m = m.NextMatch();
}

это искомая строка: ?? 4Control @ SimApi @@ QAEAAV01 @ ABV01 @@ Z

со строкой ниже, она работала, когда я получил подстроку, которую я хочу в качестве группы

1 0 00002E00 ?? 0ADOFactory @ SimApiEx @@ QAE @ ABV01 @@ Z = ?? 0ADOFactory @ SimApiEx @@ QAE @ ABV01 @@ Z (общедоступный: __thiscall SimApiEx :: ADOFactory :: ADOFactory (класс SimApiEx :: ADOFactory const &))

1 Ответ

1 голос
/ 17 марта 2019

Если вторая строка работает для вас, а первая - нет, вы можете сначала найти 1+ цифры и использовать \S+ для третьей части. Затем используйте отрицательный класс символов для захвата соответствия, а не знака равенства:

\d+\s+\d+\s+\S+\s+([^=]+) =

См. Демонстрационную версию .NET regex | C # Демо

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