2017-04-04 28 views
1

拆分字符串我想分割像這樣的字符串:C#由多個字符

「---你好你好--- -------你好---再見」

成array like this:

「hello」; 「你好你好」 ; 「再見」

我用這個命令試了一下:

test.Split(new string[] {"---"}, StringSplitOptions.RemoveEmptyEntries); 

但是,這並不工作,它拆分「-------」到3這個「----你好」 。

編輯:

我不能修改的文本,它是一個輸入,我不知道它是怎麼看起來像之前我要修改它。

的其他例子是:

---例如---

例如--------- --------文本

- - 例2 ---

它應該只拆分3個連字符而不是多個。

+0

這是正常的。 -------包含--- –

+0

@RegisPortalez是啊,但多數民衆贊成的問題,我想分裂它就像這樣,即使它包含它。 –

+0

String.Split在這裏不是正確的選擇。它不能做你想做的事。我認爲正則表達式將成爲你的朋友 – swe

回答

3

我建議嘗試Regex.Split而不是string.Split

string source = "---hello1--- hello2 ------- hello3 --- bye"; 

    var result = Regex 
    .Split(source, @"(?<=[^-]|^)-{3}(?=[^-]|$)") // splitter is three "-" only 
    .Where(item => !string.IsNullOrEmpty(item)) // Removing Empty Entries 
    .ToArray(); 

    Console.Write(string.Join(";", result)); 

結果:

hello1; hello2 ------- hello3 ; bye 
+0

這正是我所期待的,謝謝:) –

2
  1. 更換-----通過別的東西,永遠不會是你的測試,像@@@test.replace("------", "@@@")
  2. 分裂您的字符串
  3. 更換@@@由------
+0

關於4,6,7,8等序列呢? – DavidG

+0

問題是我不知道字符串包含多少字符,每次輸入都可能不同,所以這個解決方案對我不起作用。 –

0

我會建議使用中性字符,如「/ split」或類似的東西。比你可以使用test.Split(...)沒有woriing它分裂你想要的其他東西。 您的代碼現在看起來這樣的事情:

string test = "hello\split hello ------- hello \split bye"; 
test.Split("\split", StringSplitOptions.RemoveEmptyEntries); 
+2

你假設OP有更改輸入的選擇,我在這裏非常懷疑。 – DavidG

+0

@DavidG,我不能那樣做。 –

6

您可以使用正則表達式拆分。正則表達式使用負向預測(?!-)來完全匹配三個-。另見Get exact match of the word using Regex in C#

string sentence = "---hello--- hello ------- hello --- bye"; 
var result = Regex.Split(sentence, @"(?<!-)---(?!-)"); 
foreach (string value in result) { 
    Console.WriteLine(value.Trim()); 
} 

.net Fiddle

+0

同樣的答案,同一時間:) – swe

+0

哈哈是的,有沒有很多方法可以做到這一點... –

4

解決方案與正則表達式來找到您的令牌:

(?<!-)---(?!-) 

Console.WriteLine(String.Join(",", System.Text.RegularExpressions.Regex.Split("---hello--- hello ------- hello --- bye", "(?<!-)---(?!-)")))