2010-03-10 45 views
3

我想解析一些由第三方應用程序(一個TSV文件)返回的數據。我將所有數據整齊地解析到每個字段中(請參閱Parse a TSV file),但我不知道如何格式化某些字段。
有時在字段中的數據被封裝這樣的:解析一些奇怪的文本格式

=T("[FIELD_DATA]") 

(這是某種形式的Excel格式,我相信的。)
發生這種情況時,特定字符被CHAR(ASCII_NUM),以及reste逃脫的字符串也是封裝在上面的例子中,沒有=只出現在字段的開頭。

那麼,有沒有人一個想法,我怎麼能解析看起來像這樣的領域:

=T("- Merge User Interface of Global Xtra Alert and EMT Alert")&CHAR(10)&T("- Toaster ?!")&CHAR(10)&T("")&CHAR(10)&T("")&CHAR(10)&T("None")&CHAR(10)&T("")&CHAR(10)&T("None") 

(任意數量的CHAR/T()組)。

我一直在想正則表達式或循環字符串,但我懷疑這是否合法。幫助,任何人?

+0

真正的樂趣是當你有或者「在你的字符串中 - 根據excel規則可能被掩蓋...... – weismat 2010-03-10 18:29:48

回答

1

我會去類似達林,但他的正則表達式不適合我。我會用這一個:

(=T|&CHAR|&T)(\("*([A-Za-z?!0-9 -]*)"*\))+ 

你會發現,Groups[2](記得零這些偏移)將是()""內的數據,如果""存在。例如,這會發現:

- Merge User Interface of Global Xtra Alert and EMT Alert

在:

=T("- Merge User Interface of Global Xtra Alert and EMT Alert")

和:

10

在:

&CHAR(10)

如果您有:

&T("")

將在組產生一個空[2]。

希望這會有所幫助。

+0

還沒有用嵌入式測試」或&但是,似乎工作,thx。 – Antoine 2010-03-12 10:04:03

0
class Program 
{ 
    public static void Main(string[] args) 
    { 
     var input = @"=T(""- Merge User Interface of Global Xtra Alert and EMT Alert"")&CHAR(10)&T(""- Toaster ?!"")&CHAR(10)&T("""")&CHAR(10)&T("""")&CHAR(10)&T(""None"")&CHAR(10)&T("""")&CHAR(10)&T(""None"")"; 
     var matches = Regex.Matches(input, @"T\(\""([^\""]*)\""\)"); 
     foreach (Match match in matches) 
     { 
      Console.WriteLine(match.Groups[1].Value); 
     }    
    } 
}