【问题标题】:How to extract string betweeen double quotes using NSRegularExpression?如何使用 NSRegularExpression 提取双引号之间的字符串?
【发布时间】:2013-09-18 11:04:00
【问题描述】:

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

"""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

【问题讨论】:

  • regex 标签说:“正则表达式(通常缩写为“regex”)是一种用于字符串中模式匹配的声明性语言。还请包含一个标签,指定您正在使用的编程语言或工具。正则表达式(通常缩写为“regex”)是一种声明性语言,用于在字符串中进行模式匹配。还请包含一个标签,指定您正在使用的编程语言或工具。”

标签: objective-c regex nsregularexpression


【解决方案1】:

我发现以下似乎可行:

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

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

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

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

【讨论】:

  • 嗨,谢谢您的回复。我看到我得到了两个匹配的 ""rach"" ""jkdj""。我想要的是 ""rach"",""jkdj"" 作为单匹配,在一对双引号之间。 TIA
  • 谢谢@Beppe。我是在 Objective-C 的上下文中问这个的
【解决方案2】:

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

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

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

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

这是完整的行:

"""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""" -- 这个开头没有三引号

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 2020-04-01
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多