Bạn có thể sử dụng hai regex. Đầu tiên, với mẫu "\t|<bullet>"
(trong đó <bullet>
là viết tắt của biểu diễn viên đạn) được sử dụng trước tiên, để thay thế TAB và dấu đầu dòng bằng dấu cách (" "
). Thứ hai, mẫu là bộ ký tự phủ định chứa danh sách các ký tự hợp lệ của bạn, được sử dụng thứ hai, để thay thế các ký tự không hợp lệ bằng chuỗi rỗng (""
), tức là loại bỏ chúng. Vì bạn cần phải giữ cho CR và LF ký tự (và không gian), chúng phải được bổ sung vào bộ ký tự hợp lệ:
using System;
using System.Text.RegularExpressions;
static class Program
{
public static void Main()
{
string pattern1 = @"\t";
Regex regex1 = new Regex(pattern1, RegexOptions.Compiled);
string pattern2 = @"[^A-Za-z0-9~!#$^&*()_+|`\-=\\{}:"">?<\[\];',./ \r\n]";
Regex regex2 = new Regex(pattern2, RegexOptions.Compiled);
string input = "ABZabz09~!#$^&*()_+|`-=\\{}:\">?<[];',./ \r\nárvíztűrő\ttükörfúrógép";
string temp = regex1.Replace(input, " ");
string output = regex2.Replace(temp, "");
Console.WriteLine(input);
Console.WriteLine(output);
Console.ReadKey(true);
}
}
Output:
ABZabz09~!#$^&*()_+|`-=\{}:">?<[];',./
árvíztűrő tükörfúrógép
ABZabz09~!#$^&*()_+|`-=\{}:">?<[];',./
rvztr tkrfrgp
Lưu ý rằng TAB sau árvíztűrő
được thay thế bằng một không gian duy nhất.
Về đạn:
tôi đã thực hiện một danh sách gạch đầu dòng trong Word và sao chép nó vào một textarea trong một trang web. Sau đó, tôi đã lưu HTML và tìm ra rằng các viên đạn được lưu dưới dạng ký tự được mã hóa UTF-8 E280A2
. Đây là những gì tôi gọi là "biểu diễn viên đạn" ở trên. Bạn nên tìm ra các biểu diễn nhị phân của các nhân vật đạn càng tốt và thêm chúng vào mô hình đầu tiên: hoặc OR họ với nhân vật TAB, hoặc đặt tất cả trong số họ thành một bộ ký tự:
using System;
using System.Text;
using System.Text.RegularExpressions;
static class Program
{
public static void Main()
{
byte[] bulletBytes = new byte[] { 0xE2, 0x80, 0xA2 };
string bullet= Encoding.UTF8.GetString(bulletBytes);
string pattern1 = @"[\t" + bullet + "]";
Regex regex1 = new Regex(pattern1, RegexOptions.Compiled);
string pattern2 = @"[^A-Za-z0-9~!#$^&*()_+|`\-=\\{}:"">?<\[\];',./ \r\n]";
Regex regex2 = new Regex(pattern2, RegexOptions.Compiled);
string input =
bullet + "ABZabz09~!#$^&*()_+|`-=\\{}:\">?<[];',./ \r\n" +
bullet + "árvíztűrő\ttükörfúrógép";
string temp = regex1.Replace(input, " ");
string output = regex2.Replace(temp, "");
Console.OutputEncoding = Encoding.UTF8;
Console.WriteLine(input);
Console.WriteLine(output);
Console.ReadKey(true);
}
}
Output (bạn nên thay đổi console phông chữ để Lucida console để xem viên đạn):
•ABZabz09~!#$^&*()_+|`-=\{}:">?<[];',./
•árvíztűrő tükörfúrógép
ABZabz09~!#$^&*()_+|`-=\{}:">?<[];',./
rvztr tkrfrgp
Bây giờ, thêm vào TAB, viên đạn vào đầu mỗi dòng cũng đã được thay thế bằng một không gian.
Tôi biết nó không chính xác những gì bạn đang làm, nhưng làm thế nào về việc cho phép một trình soạn thảo WYSIWYG trên 'textarea' cung cấp một tùy chọn để dán từ Word. [TinyMCE] (http://www.tinymce.com/wiki.php/Plugin:paste) có một plugin chỉ cho tác vụ này? – Tr1stan
Đó không phải là một lựa chọn cho tôi kể từ bây giờ. – NoobDeveloper
Sử dụng hàm SQL 'ASCII' để tìm ra chính xác ký tự đó là gì, tôi đoán là bạn đang tìm kiếm một ký tự sai: http://msdn.microsoft.com/en-us/library/ms177545.aspx – Arran