如何使用NSRegularExpression在双引号之间提取字符串?

时间:2013-09-18 11:04:01

标签: objective-c regex nsregularexpression

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

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

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

我的正则表达式是:

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

我再次将整个字符串作为匹配。我哪里错了?如何获得""rach"", ""jkdj""""abc"", 13等等......

谢谢@ Derek.Your的回复对我帮助很大。我的数据很奇怪因为我只是尝试将各种数据组合成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

2 个答案:

答案 0 :(得分:1)

我发现以下内容似乎有效:

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

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

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

\"\"([^"]+)\"\"

答案 1 :(得分: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”“” - 这个开头没有三重报价