2011-09-11 26 views
6

Tôi có điều này:regex đơn giản thay thế để giữ gốc chuỗi

Title = Regex.Replace(Title, s, "<span style=\"background:yellow\">" + s + "</span>", RegexOptions.IgnoreCase); 

đâu s là một từ như facebook. Nếu tiêu đề là:

How to make a Facebook game 

Tôi muốn thay thế để:

How to make a <span style="background:yellow">Facebook</span> game 

Thậm chí nếu từ tìm kiếm là 'facebook' (vốn lưu ý). Về cơ bản, làm cách nào để giữ nguyên cách viết hoa gốc của từ?

Một ví dụ khác, thuật ngữ tìm kiếm FACEBOOK, chuỗi Hello FaCeBoOk được quay sang Hello <span style="background:yellow">FaCeBoOk</span>

Trả lời

6

Bạn có thể sử dụng $&substitution cho rằng:

Regex.Replace(Title, s, "<span style=\"background:yellow\">$&</span>", RegexOptions.IgnoreCase) 
1
var input = "How to make a Facebook game, do you like facebook?"; 
var searchFor = "facebook"; 
var result = Regex.Replace(
    input, 
    searchFor, 
    "<span style=\"background:yellow\">$+</span>", 
    RegexOptions.IgnoreCase); 

Điều quan trọng chỉ là $+. Nó chứa văn bản được mua cuối cùng. Điều này sẽ làm việc ngay cả đối với "Cách tạo trò chơi trên Facebook, bạn có thích facebook không?" Facebook đầu tiên sẽ được để lại chữ hoa, chữ cái thứ hai sẽ bị viết hoa.

Tôi sẽ thêm rằng nếu bạn muốn tìm kiếm chỉ dành cho toàn bộ từ, sau đó bạn có thể làm:

searchFor = @"\b" + searchFor + @"\b"; 

này sẽ xem xét chỉ cho chuỗi này nằm trên ranh giới từ.

1

Bạn chỉ cần bao gồm nhóm chụp phù hợp với từ "facebook" và bao gồm nhóm chụp đó như một phần của chuỗi thay thế. Điều này sẽ kết thúc bao gồm nó trong kết quả cuối cùng chính xác như nó xuất hiện trong đầu vào.

var title = "How to make a Facebook game"; 
title = Regex.Replace(title, 
         "(facebook)", 
         "<span style=\"background:yellow\">$1</span>", 
         RegexOptions.IgnoreCase); 

See it in action.

Các vấn đề liên quan