2011-10-19 4 views
-1
을 사용하여 텍스트에서 변수 추출

나는 앞서 간단한 작업을 할 수 있지만 RegEx 기술은 열악합니다. 누구든지 나를 도와 주거나 올바른 방향으로 나를 가리킬 수 있습니까?RegEx와 C#

예 텍스트 :-)를 내가 분석하고있어, 그리고 내가 변수 "URL"사이의 텍스트를 얻을 수있는 결과에 foreach 문을 싶습니다 :

로렘 입숨의 슬픔 앉아를 amet, consectetur [URL =/test.aspx? ID = 12345] lorem ipsum [/ URL]이 (가) 있습니다. Nullam interdum eleifend mauris, nec condementum nisi lacinia sit amet. Mauris faucibus, orci [URL =/Default.aspx? ID = 222222] lorem [/ URL] lorem [/ URL] convallis volutpat, dolor libero sollicitudin quam, id feugiat magna orci [URL =/Default.aspx? ID = 333333] ipsum dolor [/ URL] 오귀스트. Integer nec euismod sem.

+0

-1 정말 나쁜 제목 : 여기 – gsharp

+0

이것은 도움이 될 수 있습니다 : http://www.regular-expressions.info/tutorial.html – Purplegoldfish

+0

String.IndexOf() API를 사용하여 URL 값을 찾은 다음 그 색인에서 다음 URL 문자열까지 읽을 수있는 방법은 어떻습니까? 녹이다. 희망이 당신 funda을 얻는가? – Zenwalker

답변

3

이 당신을 위해 그것을 수행해야합니다 더 중첩 된 URL이 없습니다

Regex theRegex = new Regex(@"\[URL=([^\]]+)\]([^\[]+)\[/URL\]"); 
string text = "Lorem ipsum dolor sit amet, consectetur[URL=/test.aspx?ID=12345]lorem ipsum[/URL] adipiscing elit. Nullam interdum eleifend mauris, nec condimentum nisi lacinia sit amet. Mauris faucibus, orci ac[URL=/Default.aspx?ID=222222]lorem[/URL] convallis volutpat, dolor libero sollicitudin quam, id feugiat magna orci[URL=/Default.aspx?ID=333333]lorem ipsum dolor[/URL] quis augue. Integer nec euismod sem."; 
MatchCollection matches = theRegex.Matches(text); 
foreach (Match thisMatch in matches) 
{ 
//  thisMatch.Groups[0].Value is e.g. "[URL=/test.aspx?ID=12345]lorem ipsum[/URL]" 
//  thisMatch.Groups[1].Value is e.g. "/test.aspx?ID=12345" 
//  thisMatch.Groups[2].Value is e.g. "lorem ipsum" 

} 
+0

감사합니다. 이것이 내가 선택한 방식이었습니다. –

0

는 것은 이런 종류의 당신의 텍스트를 정확히처럼 보이는 경우 작동, 즉, 당신의 URL 태그는 수도

을 모두입니다
"\[URL=([^\]]*)\]([^\[]*\)\[/URL\]" 

이것은 1 개의 = URL= 이후의 내용, 2 = [URL]...[\URL] 사이의 내용 등 두 개의 그룹을 캡처해야합니다. 기본적으로

,

[
  • ] 예약 된 토큰은, 당신이 (즉, 그들을 "탈출") 백 슬래시 에게

  • [^\[] 일치 외설 모든 문자를 접두사로 필요하다고 맞게 열린 대괄호.

  • 괄호는 캡처 할 수있는 그룹을 결정합니다.

주의 사항 : 중첩 된 URL을 작동하지 않습니다 태그 자체가 작동하지 않습니다 대괄호를 포함하는 태그, 인용 문자열 "..." 또한 브래킷에서 무료로해야한다 - 그들이 올바른 마크 업처럼 취급되지 않습니다 즉, 파서가.

내가 아는 한 이러한 문제를 해결하는 유일한 방법은 전체 구문 분석을 수행하는 것입니다.

그러나 데이터에 이러한 종류의 예외가 없다고 확신하면 문제가 없습니다.

var regex = new Regex(@"\[URL=(?<url>[^\]]*)\](?<text>[^\[]*)\[/URL\]"); 
    var matches = regex.Matches(textToSearchIn); 

    foreach (Match match in matches) 
    { 
     Debug.Print("Url: {0} Text: {1}", match.Groups["url"].Value, match.Groups["text"].Value); 
    } 
0

당신은 다음 코드로 요청 된 값에 액세스 요청 정규식

\[URL=(?<url>[^\]]*)\](?<text>[^\[]*)\[/URL\] 

입니다.

관련 문제