Я бы выбрал регулярное выражение:
Первый пример, если у вас было только Status: ZZZZZ
- подобные сообщения:
String status = Regex.Match(@"(?<=Status: ).*");
// Explanation of "(?<=Status: ).*" :
// (?<= Start of the positive look-behind group: it means that the
// following text is required but won't appear in the returned string
// Status: The text defining the email string format
// ) End of the positive look-behind group
// .* Matches any character
Второй пример, если у вас было только Status: ZZZZZ
и Action: ZZZZZ
-подобные сообщения:
String status = Regex.Match(@"(?<=(Status|Action): ).*");
// We added (Status|Action) that allows the positive look-behind text to be
// either 'Status: ', or 'Action: '
Теперь, если вы хотите предоставить пользователю возможность предоставить свой собственный формат, вы можете придумать что-то вроде:
String userEntry = GetUserEntry(); // Get the text submitted by the user
String userFormatText = Regex.Escape(userEntry);
String status = Regex.Match(@"(?<=" + userFormatText + ").*");
Это позволит пользователю отправлять его формат, например Status:
, или Action:
, или This is my friggin format, now please read the status -->
...
. Часть Regex.Escape(userEntry)
важна, чтобы гарантировать, что пользователь не сломаетсяВаше регулярное выражение, отправив специальный символ, например \
, ?
, *
...
Чтобы узнать, отправляет ли пользователь значение состояния до или после текста формата, у вас есть несколько решений:
Вы можете спросить пользователя, где находится его значение статуса, а затем построить соответствующее регулярное выражение:
if (statusValueIsAfter) {
// Example: "Status: Closed"
regexPattern = @"(?<=Status: ).*";
} else {
// Example: "Closed:Status"
regexPattern = @".*(?=:Status)"; // We use here a positive look-AHEAD
}
Или вы можете бытьРазумнее и ввести систему тегов для входа пользователя.Например, пользователь отправляет Status: <value>
или <value>=The status
, а вы строите регулярное выражение, заменяя строку тегов.