1

我有使用 .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 中尝试了各种版本的正则表达式,包括以下内容:

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^

任何帮助表示赞赏!先感谢您!

4

1 回答 1

0

您确定为此需要正则表达式吗?根据我对 .qif 格式的了解,它看起来更像是为逐行阅读而制作的。读取一行,如果它以“!”开头 它是标题行,然后以下行是一个对象,其中一行由“^”组成,是对象之间的分隔符,等等。这个 SO 线程中有很多逐行文件读取示例:

如何使用 Java 逐行读取大文本文件?

http://en.wikipedia.org/wiki/Quicken_Interchange_Format

于 2013-10-12T04:20:51.417 回答