解析一些奇怪的文本格式

时间:2010-03-10 17:44:49

标签: c# parsing

我正在尝试解析第三方应用程序(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()组。)

我一直在考虑正则表达式或循环字符串,但我怀疑这是否有效。帮忙,有人吗?

2 个答案:

答案 0 :(得分:1)

我会和Darin一样,但他的正则表达式对我不起作用。我会用这个:

(=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("")

它将在Groups [2]中产生null。

希望这有帮助。

答案 1 :(得分: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);
        }            
    }
}