Мне нужно проанализировать различные строки и определить префикс, номер и суффикс. Проблема заключается в том, что строки могут быть разных форматов. Лучший способ подумать о том, как его проанализировать, - найти самое длинное число в строке, затем принять все до этого как префикс, а все после - как суффикс.
Некоторые примеры:
0001 - No prefix, Number = 0001, No suffix
1-0001 - Prefix = 1-, Number = 0001, No suffix
AAA001 - Prefix = AAA, Number = 001, No suffix
AAA 001.01 - Prefix = AAA , Number = 001, Suffix = .01
1_00001-01 - Prefix = 1_, Number = 00001, Suffix = -01
123AAA 001_01 - Prefix = 123AAA , Number = 001, Suffix = _01
Строки могут поставляться с любой смесью префиксов и суффиксов, но ключевым моментом является то, что часть Number - это всегда самый длинный последовательный список цифр.
Я пробовал различные RegEx, которые работают с большинством, но не со всеми этими примерами. Возможно, я что-то упустил, или, возможно, в этом случае RegEx не правильный путь?
(RegEx должен быть .NET-совместимым)
ОБНОВЛЕНИЕ : Для тех, кто заинтересован, вот код C #, который я придумал:
var regex = new System.Text.RegularExpressions.Regex(@"(\d+)");
if (regex.IsMatch(m_Key)) {
string value = "";
int length;
var matches = regex.Matches(m_Key);
foreach (var match in matches) {
if (match.Length >= length) {
value = match.Value;
length = match.Length;
}
}
var split = m_Key.Split(new String[] {value}, System.StringSplitOptions.RemoveEmptyEntries);
m_KeyCounter = value;
if (split.Length >= 1) m_KeyPrefix = split(0);
if (split.Length >= 2) m_KeySuffix = split(1);
}