2010-02-12 41 views
20

Tôi cần trợ giúp tập hợp regex khớp với từ kết thúc bằng "Id" với đối sánh phân biệt chữ hoa chữ thường.regex: từ đối sánh kết thúc bằng "Id"

+1

Điều gì về những từ này: 'Id' (bắt đầu và kết thúc bằng' Id') và 'O'HaraId' (bạn có muốn khớp' O'HaraId' hoặc 'HaraId') và' foo-barId' (làm bạn muốn khớp 'foo-barId' hoặc' barId')? Tóm lại: vui lòng xác định "từ" nghĩa là gì (hoặc những gì bạn muốn). –

Trả lời

38

Hãy thử biểu thức chính quy này:

\w*Id\b 

\w* cho phép nhân vật từ trước Id\b đảm bảo rằng Id là ở phần cuối của từ (\b là từ ranh giới khẳng định).

+0

@epitka, lưu ý rằng '\ w' cũng khớp với số và dấu gạch dưới. Tóm lại, các chuỗi '___ Id' và' 12345Id' cũng sẽ xuất hiện. –

+0

Tôi đã cho bạn một upvote, nhưng epitka không chỉ định nếu chỉ "Id" là cho phép, vì vậy tôi muốn bị cám dỗ để thay đổi * cho một câu trả lời hay nhất: – BenAlabaster

+0

: ngắn và dễ hiểu! – huug

4

Làm thế nào về \A[a-z]*Id\z? [Điều này tạo ra các ký tự trước Id tùy chọn. Sử dụng \A[a-z]+Id\z nếu cần phải có một hoặc nhiều nhân vật trước Id.]

1
Regex ids = new Regex(@"\w*Id\b", RegexOptions.None); 

"\ b" có nghĩa là "từ phá vỡ" & \ w có nghĩa là bất kỳ ký tự chữ, vì vậy \ w * b phương tiện Id \ "{thứ }ID". Bởi không bao gồm RegexOptions.IgnoreCase, nó sẽ phân biệt chữ hoa chữ thường.

2

Tôi sẽ sử dụng
\b[A-Za-z]*Id\b
Các \ b phù hợp với đầu và cuối của một từ ví dụ: không gian, tab hoặc xuống dòng, hoặc đầu hoặc cuối của một chuỗi.

[A-Za-z] sẽ khớp với bất kỳ chữ cái nào và * có nghĩa là 0+ được đối sánh. Cuối cùng là Id.

Lưu ý rằng điều này sẽ khớp với các từ có chữ in hoa ở giữa chẳng hạn như 'teStId'.

tôi sử dụng để tham khảo http://www.regular-expressions.info/ regex

+0

Tập hợp 'a-z' loại trừ' é' và các ký tự tương tự khác. Có lẽ không phải là một vấn đề, nhưng một cái gì đó epitka có thể muốn biết. –

+1

[A-Za-z] không khớp với các ký tự chữ cái không phải tiếng Anh, vì vậy nên tránh sử dụng \ w trừ khi bảo đảm có thể được thực hiện chỉ có chữ cái tiếng Anh mới xuất hiện. – BenAlabaster

5

Điều này có thể làm các trick:

\b\p{L}*Id\b 

đâu \p{L} khớp với bất kỳ (Unicode) bức thư và \b boundary.

+0

có \ p {L} hoạt động trong C# regex không?Tôi chưa bao giờ thấy cái đó trước đây và thường chọn \ w – BenAlabaster

+0

@BenAlabaster, vâng: http://msdn.microsoft.com/en-us/library/20bw873z.aspx#SupportedUnicodeGeneralCategories Và có, có lẽ '\ w' là đủ cho OP, nhưng nó phù hợp với nhiều hơn chữ cái (xem bình luận của tôi dưới bài viết của Gumbo). –

7

Gumbo được phiếu bầu của tôi, tuy nhiên, OP không xác định cho dù chỉ là "Id" là một từ cho phép, có nghĩa là tôi muốn tạo ra một thay đổi nhỏ:

\w+Id\b 

1 hoặc từ nhiều ký tự sau bởi "Id" và một khoảng trống. Các biến thể [a-zA-Z] không tính đến các ký tự chữ cái không phải tiếng Anh. Tôi cũng có thể sử dụng \ s thay vì \ b làm không gian thay vì một khoảng trống. Nó sẽ phụ thuộc nếu bạn cần phải quấn qua nhiều dòng.

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