簡體   English   中英

在C#中拆分字符串

[英]Splitting a string in C#

假設我有這個字符串:

"param1,r:1234,p:myparameters=1,2,3" 

......我想把它分成:

param1
r:1234
p:myparameters=1,2,3

我已經使用了分割功能,當然它會在每個逗號分割它。 有沒有辦法使用正則表達式執行此操作,還是我必須編寫自己的拆分函數?

就個人而言,我會嘗試這樣的事情:

,(?=[^,]+:.*?)

基本上,使用正向前瞻來查找逗號,然后是“鍵值”對(由鍵,冒號和更多信息[數據](包括其他逗號)定義。這應該取消逗號之間的逗號。數字也是。

你可以用; 用於分離易於使用的值。

既然你有,分離,也為價值就很難把它分解。

你有

string str = "param1,r:1234,p:myparameters=1,2,3"

建議使用

string str = "param1;r:1234;p:myparameters=1,2,3"

可以分裂為

var strArray = str.Split(';');

strArray[0];  // contains param1
strArray[1];  // r:1234
strArray[2];  // p:myparameters=1,2,3

老實說,我不確定你怎么寫一個知道哪些逗號分裂在那里的分裂。

除非在每種情況下每次都是固定數,否則只需使用String.Split重載,該重載采用int指定最多返回多少個子字符串

如果您要使用逗號分隔的數據並不總是固定數量的項目, 並且數據本身可能包含文字逗號,則應該引用它們。 如果您可以以任何方式控制輸入,您應該鼓勵它,並使用實際的CSV解析器而不是String.Split

那要看。 您無法使用正則表達式(或其他任何內容)對其進行解析,除非您可以確定將一個組與另一個組分開的一致規則。 根據你的樣本,我無法清楚地確定這樣的規則(雖然我有一些猜測)。 系統如何知道p:myparameters=1,2,3是單個項目? 例如,如果之后還有另一個項目,那么它與1,2,3之間會有什么區別? 想出來,你將非常接近解決方案。

如果您能夠更改輸入字符串的格式,為什么不決定組之間的一致分隔符? ; 將是一個不錯的選擇。 使用像param1;r:1234;p:myparameters=1,2,3這樣的輸入,組中沒有歧義,加上你可以分開; 你不需要正則表達式。

最簡單的方法是將分隔符從“,”更改為“|”。 然后你可以拆分“|” 沒問題。 但是,如果您無法更改分隔符,那么您可以使用類似於CSV的方式對這些部分進行編碼。

CSV文件具有相同的問題......標准是在列周圍放置雙引號“”。

例如,您的字符串將是“param1”,“r:1234”,“p:myparameters = 1,2,3”。

然后,您可以使用Microsoft.VisualBasic.FileIO.TextFieldParser進行拆分/解析。 你可以在c#中包含它,即使它在VisualBasic命名空間中。

TextFieldParser

你的意思是:string [] str = System.Text.RegularExpression.Regex.Spilt(“param1,r:1234,p:myparameters = 1,2,3”,@“\\,”);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM