This sounds like a user input design question. I would use two inputs; one for the percent and one for the integer. This is much easier to validate then a string.
If you really need to parse the string then replace the "%" with an empty string, split the string by the "of", then use int.TryParse() to convert the string to an integer.
String.Replace Method
String.Split Method
Int32.TryParse
The following code assumes you provided an accurate use case.
string input = "3% of 45".ToUpper();;
input = input.Replace("%", "");
string[] values = input.Split("OF", StringSplitOptions.TrimEntries);
int per = 0;
int total = 0;
int.TryParse(values[0], out per);
int.TryParse(values[1], out total);
Console.WriteLine($"{(decimal)per / 100.00m}");
Console.WriteLine($"{total}");
Results
0.03
45