需求:richTextBox1 含多行文本,每行逗號分隔,第 3 列為身份證號,提取所有身份證號顯示在 richTextBox2,每行一個。
private void btnExtract_Click(object sender, EventArgs e) {
string text = richTextBox1.Text;
if (string.IsNullOrWhiteSpace(text)) return;
var lines = text.Split(new[] { "\r\n", "\n" }, StringSplitOptions.RemoveEmptyEntries);
var sb = new StringBuilder();
foreach (string line in lines) {
var parts = line.Split(',');
if (parts.Length >= 3) {
string idCard = parts[2].Trim(); // 第3列 (索引2)
// 可選:簡單驗證身份證格式 (18位數字/X)
if (Regex.IsMatch(idCard, @"^\d{17}[\dXx]$")) {
sb.AppendLine(idCard);
}
}
}
richTextBox2.Text = sb.ToString();
}
Split(new[] {"\r\n", "\n"}, ...) 兼容 Windows/Unix 換行符。StringSplitOptions.RemoveEmptyEntries 忽略空行。StringBuilder 高效拼接字符串,避免循環 += 性能問題。Regex.IsMatch 簡單驗證身份證格式 (可選)。Trim() 去除字段前後空白。
private async void btnExtract_Click(object sender, EventArgs e) {
btnExtract.Enabled = false;
richTextBox2.Text = "處理中...";
await Task.Run(() => {
// 上述提取邏輯構建 result 字符串
string result = ...;
this.Invoke((Action)(() => {
richTextBox2.Text = result;
btnExtract.Enabled = true;
}));
});
}
此邏輯清晰提取指定列數據,適用於 CSV 格式文本處理場景。