다양한 문자열을 구문 분석하고 접두사, 숫자 및 접미사를 결정해야합니다. 문제는 문자열이 다양한 형식으로 제공 될 수 있다는 것입니다. 나를 구문 분석하는 방법에 대해 생각하는 가장 좋은 방법은 문자열에서 가장 긴 숫자를 찾은 다음 그 전의 모든 것을 접두어로 사용하고 이후의 모든 것을 접미어로 사용하는 것입니다.문자열에서 가장 긴 숫자 목록을 구문 분석 할 수있는 RegEx가 있습니까?
몇 가지 예 :
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
문자열은 접두사와 접미사의 혼합물로 올 수 있지만, 중요한 점은 숫자 부분이 항상 자리의 가장 긴 연속 목록입니다.
나는 이러한 예제 전부는 아니지만 대부분의 경우 작동하는 다양한 RegEx를 사용해 보았습니다. 제가 뭔가를 놓친 것일 수도 있고, 아니면 RegEx가이 경우 올바른 방법이 아닐 수도 있습니다.
은 (정규식은 .NET 호환되어야합니다)
UPDATE :
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);
}
123AAA 001_01 - 접두어 = 123AAA, 번호 = 001, 접미사 = _01' <- 여기서 접두어 "123"의 숫자는 해당 번호 인 "001"만큼 길다. 그들을 구별 할 길이 없습니다. – polemon
좋은 지적. 필자는 12AAA 만 수행하도록 테스트 케이스를 수정했기 때문에 이러한 값이 발생할 가능성은 매우 낮습니다. 그렇다면 가장 긴 숫자가 아닌 가장 긴 숫자를 선택합니다. –