[英]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命名空間中。
你的意思是:string [] str = System.Text.RegularExpression.Regex.Spilt(“param1,r:1234,p:myparameters = 1,2,3”,@“\\,”);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.