2013-02-26 32 views
6

Vì vậy, tôi có chuỗi này []:Looping thông qua một regex thay thế

string[] middleXMLTags = {"</Table1><Table2>", "</Table2><Table3>"}; 

Và tôi muốn làm một cái gì đó như thế này với nó:

int i = 0; 
foreach (regex where it finds the replacement string) 
{ 
    response = Regex.Replace(response, "</Table><Table>", middleXMLTags[i]); 
    i++; 
} 
response = Regex.Replace(response, "<Table>", <Table1>); 
response = Regex.Replace(response, "</Table>", </Table3>); 

Cuối cùng, tôi chỉ yêu cầu nếu nó có thể bằng cách nào đó lặp qua một Regex, và do đó có thể thay thế string với các giá trị khác nhau được lưu trữ trong một string[]. Nó không phải là một vòng lặp foreach, và tôi biết rằng mã này là vô lý, nhưng tôi đặt nó nghe để hỏi câu hỏi rõ ràng nhất có thể. Xin vui lòng bình luận bất kỳ câu hỏi mà bạn có cho tôi.

Cảm ơn tất cả sự giúp đỡ =)

+2

Nhìn vào [Regex.Matches] (http://msdn.microsoft.com/en-GB/library/system.text.regularexpressions.regex.matches.aspx). –

+3

[Không phân tích cú pháp HTML với Regex] (http://stackoverflow.com/a/1732454/558018). – AgentFire

Trả lời

6

Bạn có thể liệt kê thông qua các chuỗi thay thế. Bạn sẽ phải điều chỉnh nó cho phù hợp với nhu cầu của bạn, nhưng tôi tưởng tượng một cái gì đó như thế này sẽ làm việc.

Regex needle = new Regex("\[letter\]"); 
string haystack = "123456[letter]123456[letter]123456[letter]"; 
string[] replacements = new string[] { "a", "b", "c" }; 

int i = 0; 
while (needle.IsMatch(haystack)) 
{ 
    if (i >= replacements.Length) 
    { 
     break; 
    } 

    haystack = needle.Replace(haystack, replacements[i], 1); 
    i++; 
} 
+1

Một lưu ý về giải pháp này là điều này sẽ phù hợp với các mẫu trùng lặp cũng như khớp với bất kỳ văn bản nào từ các thay thế trước đó. Điều này có thể hoặc có thể không được mong muốn. –

6

tôi sẽ bỏ qua "không phân tích cú pháp HTML với Regex" thảo luận và đề nghị bạn nên nhìn vào quá tải cho Regex.Replace mà phải mất một đại biểu MatchEvaluator.

Về cơ bản, bạn có thể chuyển giao một đại biểu cho phương thức Replace() được gọi cho mỗi kết quả phù hợp và trả về văn bản thay thế.

Trang MSDN này cung cấp ví dụ đưa số chỉ mục vào văn bản thay thế. Bạn sẽ có thể sử dụng chỉ mục vào mảng của mình để lấy văn bản thay thế.

Dưới đây là một ví dụ phản ánh dụ của bạn:

string[] middleXMLTags = {"</Table1><Table2>", "</Table2><Table3>"}; 

string response = "</Table><Table><foo/></Table><Table>"; 
Console.WriteLine(response); 
int i = 0; 

response = Regex.Replace(response,@"</Table><Table>",m=>middleXMLTags[i++]); 
Console.WriteLine(response); 

Output:

</Table><Table><foo/></Table><Table> 
</Table1><Table2><foo/></Table2><Table3> 
+0

Dòng này tuyệt vời và xứng đáng với nhiều điểm hơn: phản hồi = Regex.Đặt lại (phản hồi, @ "

", m => middleXMLTags [i ++]); – Richard

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