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";

ここに画像の説明を入力

4

1 に答える 1

1

基本的な正規表現についてもっと学んでおけばよかったと思われます。
Regular-Expressions.infoは、私のお気に入りのリソースの 1 つです。とはいえ、うまくいけば、これは役に立つスタートです。


単一の表現よりも、各ピースを個別に取得する方がクリーンな場合があります。このようなもの:

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;

あなたが本当に望むなら、おそらく1つでそれを行うことができますが、それはちょっと面倒です:

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」にはスペースが含まれていないと仮定します)。それが役立つことを願っています。

于 2013-04-25T15:38:34.413 に答える