0

嗨,我必须在双引号之间提取数据。如果我的字符串是:

"""rach"",""jkdj""","""abc"",13","123,4.45,""19""","3.33,""123"",""2.221"""

我的字符串是来自 CSV 文件的数据。我需要在双引号之间提取数据。我尝试使用 NSRegularExpression 来完成此操作。

我的正则表达式模式是:

NSString *exp=@"\".+\""

我再次将整个字符串作为匹配项。我哪里错了?我怎样才能得到""rach"", ""jkdj""等等""abc"", 13...

谢谢@Derek。您的回复对我帮助很大。我的数据很奇怪,因为我只是在尝试将各种数据组合放入 CSV 文件中。CSV 文件中的条目可以有多种组合。可能有也可能没有数据本身中的逗号或双引号。我想要的只是双引号之间的数据(如果包含双引号本身就没有问题)。我希望我能够解释我想要的。在你的帮助下,我已经写了此字符串的正则表达式。

NSString *exp=@"[^,]\"*[^,]*,(([^,]\"*?,*?)*|(\"*[^,]*\"*)*)";

这里 exp 是我的正则表达式。

"""pav"",""ani""","""abc"",13","123,4.45,""19""","3.33,""123"",""2.221"""

这是我的字符串。第一个双引号有 ""pav"",""ani""。第二个有 ""abc"",13。第三个有 123,4.45,""19""。第四个有 3.33 ,""123"",""2.221""。所以我需要这些中的每一个作为匹配包含的双引号不会成为问题。

每场比赛我都应该得到以下信息:

"""pav"",""ani"""
"""abc"",13"
"123,4.45,""19"""
"3.33,""123"",""2.221"""

但是我用我提到的正则表达式得到了这个。

2013-09-20 11:09:04.398 regexPractice[13968] match: """pav"",""ani"""
2013-09-20 11:09:04.425 regexPractice[13968] match: """abc"",13"
2013-09-20 11:09:04.434 regexPractice[13968] match: "123,4.45
2013-09-20 11:09:04.442 regexPractice[13968] match: ""19""","3.33
2013-09-20 11:09:04.454 regexPractice[13968] match: ""123"",""2.221"""

我可以看到正则表达式需要稍作更改,但我找不到在哪里。

有什么线索吗?TIA

4

2 回答 2

1

我发现以下似乎有效:

\"\"[^"]+\"\"

逻辑是引号,引号,任何不是引号的字符(超过一次),引号,引号。

如果需要,您可以在任何不是引号(超过一次)部分的字符周围放置方括号以捕获内部部分:

\"\"([^"]+)\"\"
于 2013-09-18T11:11:59.497 回答
0

好的..也许这就是你想要的:

\"\"\".+?\"\"\"

.+? - 是懒惰的......我一直想知道如何使用懒惰的运算符。

但是您的数据的定义方式似乎有些奇怪 - 我正在寻找三引号。

这是完整的行:

"""rach"",""jkdj""","""abc"",13","123,4.45,""19""","3.33,""123"",""2.221"" "

使用三重引号集手动拆分:

"""rach"",""jkdj"""

"""abc"",13","123,4.45,""19"""

"3.33,""123"",""2.221""" - 这个开头没有三引号

于 2013-09-18T13:22:55.733 回答