我正在尝试解析第三方应用程序(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 :(得分: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);
}
}
}