嗨我必须在双引号之间提取数据。如果我的字符串是:
"""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
答案 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”“” - 这个开头没有三重报价