我有使用.NET解析.qif文件的代码。我正在尝试将此代码移植到Java,但是正在使用正则表达式进行解析的部分问题。以下是文件开头的示例:
!Type:Tag
NAdam
DSon
^
NAllison
^
NAmber
DSabrina's Sister
^
NAnthony
^
在.NET中,我可以使用此代码开始解析:
// Read the entire file
string input = reader.ReadToEnd();
// Split the file by header types
string[] transactionTypes = Regex.Split(input, @"^(!.*)$", RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace);
当我调试.NET解析器时,我看到以下内容:
transactionTypes[0] = ""
transactionTypes[1] = "!Type:Tag\r"
transactionTypes[2] = "\nNAdam\r\nDSon\r\n^\r\nNAllison\r\n^NAmber\r\nDSabrina's Sister\r\nNAnthony\r\n^
在Java中,似乎总是跳过!Type:Tag
行,所以我不知道要解析的类型。我在Java中尝试了各种版本的Regular Expression,包括以下内容:
String[] transactionTypes = dataToParse.split("!.*");
String[] transactionTypes = dataToParse.split("\\s*^(!.*)\\s*");
String[] transactionTypes = dataToParse.split("\\s*(?m)^(!.*)$\\s*");
当我说它跳过!Type:Tag
行时,我会在调试时看到以下内容:
transactionTypes[0] = ""
transactionTypes[1] = "\nNAdam\r\nDSon\r\n^\r\nNAllison\r\n^NAmber\r\nDSabrina's Sister\r\nNAnthony\r\n^
任何帮助表示赞赏!提前谢谢!
答案 0 :(得分:0)
你确定正则表达式是必要的吗?从我收集到的.qif格式来看,它看起来更像是为了逐行阅读。读一行,如果它以“!”开头它是一个标题行,然后下面的行是一个对象,一行由“^”组成,它们是对象之间的分隔符等。这个SO线程中有很多逐行文件读取示例: