2013-04-25 4 views
0

여객 이름, 기본 요금, 총 요금, 수수료, fop과 같은 문자열 입력에서 일부 데이터를 가져 오려고합니다. 이 모든 분야에서 저는 아래의 이미지에서 보여주고 있습니다. 이 모든 필드는 데이터 테이블에 저장하려고합니다. 열 이름은 다음과 같습니다. - 승객 이름, 기본 요금, 총 요금, 수수료, fop.문자열 입력에서 데이터를 가져 와서 데이터 테이블에 저장하는 방법

이 내 문자열 입력 : - 당신이 기본 정규 표현식에 대한 자세한 내용은 잘 제공 될 것 같은

string request= @"TST00009 DCA1S211E RH/07FEB F N LD 13FEB13 OD SANSAN SI      
T-E                    
FXP/R,U                   
3.MACDORMAN/SAM CORBIN (CHD)             
1 SAN BA 272 N 24JUN 825P OK NHXUQCNJ CH  24JUN24JUN 1PC     
2 O LHR BA 273 N 07AUG 325P OK NHXUQCNJ CH  07AUG07AUG 1PC     
SAN                   
FARE U USD  492.00               
TX001 X USD 458.00YQAC TX002 X USD  5.50YCAE TX003 X USD 17.20USAP  
TX004 X USD 17.20USAS TX005 X USD  5.00XACO TX006 X USD  7.00XYCR  
TX007 X USD  2.50AYSE TX008 X USD 105.61GBAD TX009 X USD 62.66UBAS  
TX010 X USD  4.50XF               
TOTAL USD 1177.17               
GRAND TOTAL USD 1177.17              
SAN BA LON M/BT NHXUQCNJ/CH BA SAN M/BT NHXUQCNJ/CH END       
ROE1.000000 XF SAN4.5               

BT1195364*BA *FM0.00                

40.FE BA ONLY/NONREF/NONEND SEE GGAIRBAGUSA -BG:BA        
45.FM *M*0.00A                 
46.FP CHECK"; 

enter image description here

+0

실제로 비행 가능성에 대한 신청을하고 있으므로이 유형의 입력을 받았습니다. 이 입력을 고객의 편의를 위해 그리드보기에 표시하려고합니다. –

+0

내가 원하는 이미지에 필요한 모든 필드를 보여주었습니다. –

+0

따라서 "FXP/R, U", "FARE U USD", "GRAND TOTAL USD", "45.FM"및 "46.FP"뒤에 오는 값을 찾고 싶습니까? 간단히 검색 할 수 있습니까? – Wiseguy

답변

1

보인다.
Regular-Expressions.info은 내가 가장 좋아하는 리소스 중 하나입니다. 즉, 이것이 도움이되는 시작이라고 희망적으로 말했습니다.


하나의 표현식보다는 각 조각을 개별적으로 가져 오는 것이 더 깔끔할 수 있습니다. 이런 식으로 뭔가 :

Match m1 = Regex.Match(request, @"FXP/R,U\s+(.+?) \(CHD\)", RegexOptions.Singleline); 
string name = m1.Groups[1].Value; 

Match m2 = Regex.Match(request, @"FARE U USD\s+(\d+\.\d{2})"); 
string fare = m2.Groups[1].Value; 

Match m3 = Regex.Match(request, @"GRAND TOTAL USD\s+(\d+\.\d{2})"); 
string total = m3.Groups[1].Value; 

Match m4 = Regex.Match(request, @"45\.FM (\S+)"); 
string commission = m4.Groups[1].Value; 

Match m5 = Regex.Match(request, @"46\.FP (\S+)"); 
string fop = m5.Groups[1].Value; 

당신이 정말로 원하는 경우, 당신은 아마 하나에 그것을 할 관리 할 수 ​​있지만,이 종류의 지저분한 생겼어이의

string pattern = @"FXP/R,U\s+(?<name>.+?) \(CHD\).*FARE U USD\s+(?<fare>\d+\.\d{2}).*GRAND TOTAL USD\s+(?<total>\d+\.\d{2}).*45\.FM (?<commission>\S+).*46\.FP (?<FOP>\S+)"; 

Match m = Regex.Match(request, pattern, RegexOptions.Singleline); 

Console.WriteLine("Name: {0}", m.Groups["name"]); 
Console.WriteLine("Fare: {0}", m.Groups["fare"]); 
Console.WriteLine("Total: {0}", m.Groups["total"]); 
Console.WriteLine("Commission: {0}", m.Groups["commission"]); 
Console.WriteLine("FOP: {0}", m.Groups["FOP"]); 

근무 예 : http://ideone.com/0bHUW9

이러한 패턴을 약간 조정해야 할 수도 있습니다. 그들은 당신의 주어진 예제를 위해 일하지만, 어떻게 일치하는지에 대한 가정을했습니다 (예를 들어, "커미션"과 "FOP"에는 공백이 들어 있지 않다고 가정). 희망이 도움이됩니다.

+0

고마워, 그게 다야. –

관련 문제