【发布时间】:2022-01-26 18:22:43
【问题描述】:
如何将这个带有空格的特定字符串拆分为数组? MyDatabase C:\MyDatabase\Backup "C:\Program Files\MySQL\MySQL Server 8.0\bin"
我想要这样的数组:\
[MyDatabase], [C:\MyDatabase\Backup], ["C:\Program Files\MySQL\MySQL Server 8.0\bin"]
我无法为 .Split() 函数匹配任何特定的分隔符
【问题讨论】:
-
您可以使用 ("[^"]+")|[^ ]+ 作为正则表达式模式。
-
它实际上是一个以空格而不是逗号作为分隔符的 CSV。不要重新发明 CSV 解析,只需使用现有的解析并让您设置分隔符。如果您不想这样做,请编写一个简单的有限状态机来进行解析;逐个字符地读取行字符-您要么是布尔值“在
"报价内”,要么是“不在报价内”,因此每次遇到报价时都要切换布尔值。如果你不在 inside_a_quote 并且你遇到了一个空格,那么从当前位置取一段字符串回到你最后取一段的地方 -
@Luuk 不是真的
-
看看 Mark Bracektt 在stackoverflow.com/questions/959448/split-csv-string 中的回答——它是 VB,但它对 C# 开发人员来说是可读的,因为它很简单:一次是字符,检查它,切换它是否是引用。如果它既不是定界符也不是引号,它将char连接到一个字符串上是非常低效的,所以我将它调整为只有一个int变量来记住最后一次拆分的位置,并从那里添加子字符串到列表是必需的..
-
或者我会使用字符串生成器而不是字符串,并将字符连接到其中,以便在将单词添加到列表时对其进行字符串化和清除