用 Regular Expression 幾乎一行程式就搞定了。以下是 php 程式範例:
<pre class="c" name="code"><?php
$t = '你好嗎?我很好,那你呢?有空再聊囉。掰!';
$result = preg_split('/(?|,|\?|。|!)/', $t, -1, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);
var_dump($result);
/*
輸出結果
array(10) {
[0]=>
string(6) "你好嗎"
[1]=>
string(2) "?"
[2]=>
string(6) "我很好"
[3]=>
string(2) ","
[4]=>
string(6) "那你呢"
[5]=>
string(1) "?"
[6]=>
string(10) "有空再聊囉"
[7]=>
string(2) "。"
[8]=>
string(2) "掰"
[9]=>
string(1) "!"
}
*/
?>
你可以用 C# 改寫。
這備例子蠻實用的,
剛好是逗點符號來斷句,
拿來做內部交流的例子(同事幾乎都是拿網路現成的樣式例子在用,這種例子,沒現成的樣式,但又不會太困難)
現實中,應該還會有一些space,tab,newline的分隔符號,
真是一個好例子,
用一般程式不好寫(string function) ,用正規式輕易就解決了!
用 Regular Expression, C# 改寫後:
輸入:你好嗎?我很好,那你呢?有空再聊囉。掰!
string t = "你好嗎?我很好,那你呢?有空再聊囉。掰!";
string pattern = "(?|,|\\?|。|!)";
MatchCollection matches = Regex.Matches(t, pattern);
int lastIndex = 0;
foreach (Match m in matches)
{
Console.WriteLine(t.Substring(lastIndex, m.Index - lastIndex + m.Length));
lastIndex = m.Index + m.Length;
}
// 輸出最後一段字符串
if (lastIndex < t.Length)
{
Console.WriteLine(t.Substring(lastIndex));
}
輸出:
你好嗎?
我很好,
那你呢?
有空再聊囉。
掰!