2014-09-22 3 views
-2

동적 패턴이 포함 된 문자열이 있는데, 특별한 순서는 아닙니다.문자열의 숫자 찾기

content: ($$)^1 OR title: ($$)^15 OR url: ($$)^20 

더 이해하기 위해, 나는 관련이 있는지에 세분화 한 내용 :

content: ($$)^1 

title: ($$)^15 

url: ($$)^20 

그래서 필드 이름 (내용, 제목, URL 등)의 내 목록을 통해 반복 할 때, 해당 필드가 문자열에 있는지 확인해야합니다. 그렇다면 당근 직후에 번호를 추출해야합니다.

콘텐츠의 경우 1이됩니다. 제목, 15 등등.

+0

@Nick을 - 당신을 생각 점점 가까워지고 있지만 완전히 명확하지는 않습니다. 나에게 명확하지 않은 것 : 문자열에 3 가지 순서가 다르게 적용됩니까? 예를 들어, 한 문자열에 'content : 1111, title : 15151515, url : 20202020' 및 다른 문자열에'url : 20202020, title : 15151515, content : 1111'이 있습니까? 때때로 들판이 사라질까요? 예 : 'url : 20202020'. 데이터 샘플을 제공해주십시오. – jww

+0

@jww 질문에 대답하려면 예. 그것은 어떤 순서로도 될 수 있습니다. 그러나이 숫자는 오직 2 자리 숫자입니다. 99보다 높지 않습니다. 데이터의 샘플은 위의 첫 번째 코드 블록입니다. "1"을 추출하고자하는 내용의 경우, 제목으로 "15"를 추출하고 싶습니다. 이 숫자는 다를 수 있지만 두 자릿수를 넘지 않습니다. 또한, 항상 1로 기본 설정됩니다. – Nick

답변

2

사용 정규식 :

당신은 정규식이 필요하지 않습니다
static void Main() 
     { 
      var input = "content: ($$)^1 OR title: ($$)^15 OR url: ($$)^20"; 
      foreach(Match m in Regex.Matches(input, @"(?<name>\S+): \(\$\$\)\^(?<digits>\d+)")) 
      { 
       Console.WriteLine(m.Groups["name"] + " : " + m.Groups["digits"]); 
      } 
     } 
+0

고마워요. 정확히 제가 찾고있는 것이 었습니다. – Nick

1

다음과 같은 번호를 추출 할 수 있습니다.

\(\${2}\)\^(\d+) 
0

, 당신은? 당신은 SplitOR, :^으로 할 수는 숫자가 아닌 숫자를 포함하고이 잘못된 형식, 철 건너 뛸 가능성이 있다면

string input = "content: ($$)^1 OR title: ($$)^15 OR url: ($$)^20"; 
string[] tokens = input.Split(new[] { " OR " }, StringSplitOptions.RemoveEmptyEntries); 
var lookup = tokens.ToLookup(str => str.Split(':')[0].Trim(), str => str.Split('^').Last().Trim()); 
int content = lookup["content"].Select(int.Parse).DefaultIfEmpty(int.MinValue).First(); 
int title = lookup["title"].Select(int.Parse).DefaultIfEmpty(int.MinValue).First(); 
int url = lookup["url"].Select(int.Parse).DefaultIfEmpty(int.MinValue).First(); 

:

int url = lookup["url"] 
    .Where(num => num.All(Char.IsDigit)) 
    .Select(int.Parse) 
    .DefaultIfEmpty(int.MinValue) 
    .First(); // int.MinValue if non-digits were detected 
+0

정규식을 사용하지 않는 이유는 무엇입니까? – brz

+0

@brz : regex는 일반적으로 문제가 없지만 내 취미 중 하나이기 때문에 개인적으로 싫어합니다. 정규식보다 문자열을 더 쉽게 읽을 수있는 방법을 찾았습니다. –