Tôi cần thuật toán tìm kiếm chuỗi C# có thể khớp với nhiều lần xảy ra mẫu. Ví dụ, nếu mẫu là 'AA' và chuỗi là 'BAAABBB' Regex tạo kết quả trận đấu Index = 1, nhưng tôi cần kết quả Index = 1,2. Tôi có thể buộc Regex đưa ra kết quả như vậy không?Kết hợp nhiều chuỗi C#
Trả lời
Bất kỳ biểu thức chính quy có thể cung cấp một loạt các MatchCollection
Sẽ rất tuyệt, nếu bạn có thể dán một số mã demo cho việc này. –
Đây là lý do tôi thêm liên kết vào MSDN ... – Dror
Sử dụng một mô hình lookahead: -
"A (? = A)"
Điều này tìm thấy bất kỳ A được theo sau bởi một A khác mà không tiêu thụ A. sau đây Do đó AAA sẽ phù hợp với mô hình này hai lần.
Để tóm tắt tất cả các bình luận cũ hơn:
Dim rx As Regex = New Regex("(?=AA)")
Dim mc As MatchCollection = rx.Matches("BAAABBB")
này sẽ tạo ra những kết quả mà bạn đang yêu cầu.
EDIT:
Đây là phiên bản C# (làm việc với VB.NET hôm nay vì vậy tôi vô tình tiếp tục với VB.NET).
Regex rx = new Regex("(?=AA)");
MatchCollection mc = rx.Matches("BAAABBB");
Hãy thử điều này:
System.Text.RegularExpressions.MatchCollection matchCol;
System.Text.RegularExpressions.Regex regX = new System.Text.RegularExpressions.Regex("(?=AA)");
string index="",str="BAAABBB";
matchCol = regX.Matches(str);
foreach (System.Text.RegularExpressions.Match mat in matchCol)
{
index = index + mat.Index + ",";
}
Nội dung của chỉ số là những gì bạn đang tìm kiếm với dấu phẩy cuối cùng loại bỏ.
Bạn có thực sự tìm kiếm các bản chất chỉ dài hai ký tự không? Nếu vậy, tìm kiếm một chuỗi ký tự 20 triệu sẽ bị chậm bất kể bạn sử dụng regex nào (hoặc bất kỳ kỹ thuật phi regex nào, cho vấn đề đó). Nếu chuỗi tìm kiếm dài hơn, công cụ regex có thể sử dụng thuật toán tìm kiếm như Boyer-Moore hoặc Knuth-Morris-Pratt để tăng tốc độ tìm kiếm - thực tế càng lâu càng tốt.
Nhân tiện, loại tìm kiếm bạn đang nói đến được gọi là các kết quả trùng lặp; Tôi sẽ thêm nó vào các thẻ.
- 1. Kết hợp/chuỗi nhiều đối tượng jQuery
- 2. Kết hợp nhiều thuộc tính trong C#
- 3. Boost C++ regex - cách nhận nhiều kết quả phù hợp
- 4. Kết hợp chuỗi tốc độ cao trong C#
- 5. Kết hợp nhiều drawables
- 6. Kết hợp các chuỗi mờ
- 7. kết hợp: tránh nhiều lồng nhau foreach
- 8. Mảng kết hợp từ chuỗi
- 9. kết hợp hai biến chuỗi
- 10. Nhận nhiều chuỗi kết nối từ web.config
- 11. PostgreSQL: cách kết hợp nhiều hàng?
- 12. Kết hợp nhiều thay thế regex
- 13. Kết hợp nhiều bộ hàng trong SPARQL
- 14. Kết hợp hai (hoặc nhiều) PDF
- 15. Kết hợp Regex giữa hai chuỗi?
- 16. Làm thế nào để kết hợp các chuỗi C++ và các chuỗi Arduino?
- 17. chuỗi kết hợp mysql bắt đầu chuỗi trong bảng
- 18. Chuyển đổi trường hợp kết hợp chuỗi regex và số
- 19. Tại sao Boost.Regex không tìm thấy nhiều kết quả phù hợp trong một chuỗi?
- 20. Sự kiện kết hợp nhiều phím Qt
- 21. Kết hợp nhiều tiểu bang trong StateT
- 22. Kết hợp nhiều bộ chọn giả
- 23. Kết hợp nhiều kho SVN vào một
- 24. Kết hợp nhiều dòng vào một dòng
- 25. Kết hợp nhiều tệp .woff vào một
- 26. Java: Kết hợp nhiều biến vị ngữ
- 27. Kết hợp các tệp PDF C#
- 28. Kết hợp chuỗi trên hai cột trong [R]
- 29. danh sách lambda để kết hợp chuỗi
- 30. Kết hợp các chuỗi trong SPARQL?
mẫu '(? = A)' cho kết quả tốt nhưng mở rộng rất nhiều thời gian calc. Tôi có một chuỗi với 20 ký tự và tốc độ calc là rất quan trọng. Có ai có giải pháp khác không? Cảm ơn. –
"(? = A)" không thực hiện những gì bạn muốn; bạn đã thử "A (? = A)" như AnthonyWJones đã đề xuất chưa? –