2011-07-06 45 views
6

Tôi đang xóa chuỗi tìm kiếm và cần xóa bất kỳ dấu chấm nào xuất hiện nhưng giữ dấu thập phân khi nằm giữa hai chữ số.C# Regex - Xóa dấu thập phân khi không nằm giữa hai chữ số

Ví dụ nếu tôi có một chuỗi

599,75, Tigers.

Sau đó, tôi muốn nó trở lại như

599,75, Tigers

Tôi đã suy nghĩ một dòng như:

strNewString = Regex.Replace (strOrigString , strRegEx, string.Empty);

Trường hợp strRegEx sẽ chỉ khớp với. Để xóa nhưng tôi đang gặp khó khăn trong việc tìm cách chỉ khớp. và không phải những thứ xung quanh nó.

Trả lời

7

Bạn nên tận dụng lợi thế của the lookahead and lookbehind assertions. Chúng không thực sự khớp với các ký tự trong đầu vào của bạn, nhưng chỉ xác định xem có khớp hay không.
Bạn có thể sử dụng vẻ ngoài tiêu cực và lookbehind tiêu cực để làm điều ngược lại, đây là những gì thích hợp ở đây. Sử dụng những điều sau đây cho strRegEx sẽ phù hợp với thời gian mà không được bao quanh bởi chữ số:

(?<!\d)\.(?!\d) 
+0

Trang này hoạt động và trang hướng dẫn bạn liên kết rất hữu ích. Cảm ơn! – HackWeight

0

Bạn có thể sử dụng giống như \.(?!\d)

2

Con đường tôi đọc câu hỏi, bạn muốn kết hợp một dấu chấm duy nhất nếu nó không phải là cả trước và sau đó là chữ số. Ví dụ: trong danh sách sau, bạn muốn khớp với dấu chấm trong mọi chuỗi ngoại trừ chuỗi cuối cùng, bởi vì đó là chữ số duy nhất có chữ số ở cả hai mặt của nó.

abc. 
.def 
x.y 
123. 
.456 
x.78 
90.x 
599.75

Câu trả lời được chấp nhận, (?<!\d)\.(?!\d), chỉ khớp với ba chuỗi đầu tiên; nó tương đương với:

a dot, ((not preceded by a digit) AND (not followed by a digit)) 

Nếu giải thích của tôi là đúng, bạn muốn một cái gì đó như thế này:

(?<!\d)\.|\.(?!\d) 

... tương đương với:

(a dot, not preceded by a digit) OR (a dot, not followed by a digit) 

Trong mọi trường hợp, nó trả tiền chính xác như bạn có thể khi nói về kết hợp văn bản, đặc biệt là khi nó liên quan đến việc sử dụng các giải pháp thay thế.

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