Regex không phân biệt chữ hoa chữ thường mà không sử dụng kiểu liệt kê RegexOptions


76

Có thể thực hiện đối sánh không phân biệt chữ hoa chữ thường trong C # bằng cách sử dụng lớp Regex mà không đặt cờ RegexOptions.IgnoreCase không?

Những gì tôi muốn có thể làm là trong chính regex xác định xem tôi có muốn thao tác khớp được thực hiện theo cách không phân biệt chữ hoa chữ thường hay không.

Tôi muốn regex này taylor, khớp với các giá trị sau:

  • Taylor
  • taylor
  • taYloR

Câu trả lời:


108

Tài liệu MSDN

(?i)taylor khớp với tất cả các đầu vào mà tôi đã chỉ định mà không phải đặt cờ RegexOptions.IgnoreCase.

Để bắt buộc phân biệt chữ hoa chữ thường, tôi có thể làm (?-i)taylor.

Có vẻ như các tùy chọn khác bao gồm:

  • i, trường hợp không nhạy cảm
  • s, chế độ một dòng
  • m, chế độ nhiều dòng
  • x, chế độ giãn cách tự do

59

Như bạn đã tìm hiểu, (?i)nội tuyến tương đương với RegexOptions.IgnoreCase.

Chỉ FYI, có một số thủ thuật bạn có thể làm với nó:

Regex:
    a(?i)bc
Matches:
    a       # match the character 'a'
    (?i)    # enable case insensitive matching
    b       # match the character 'b' or 'B'
    c       # match the character 'c' or 'C'

Regex:
    a(?i)b(?-i)c
Matches:
    a        # match the character 'a'
    (?i)     # enable case insensitive matching
    b        # match the character 'b' or 'B'
    (?-i)    # disable case insensitive matching
    c        # match the character 'c'

Regex:    
    a(?i:b)c
Matches:
    a       # match the character 'a'
    (?i:    # start non-capture group 1 and enable case insensitive matching
      b     #   match the character 'b' or 'B'
    )       # end non-capture group 1
    c       # match the character 'c'

Và bạn thậm chí có thể kết hợp các cờ như thế này: a(?mi-s)bcnghĩa là:

a          # match the character 'a'
(?mi-s)    # enable multi-line option, case insensitive matching and disable dot-all option
b          # match the character 'b' or 'B'
c          # match the character 'c' or 'C'

27

Như muỗng16 nói, đó là (?i). MSDN có một danh sách các tùy chọn biểu thức chính quy bao gồm một ví dụ về việc sử dụng đối sánh không phân biệt chữ hoa chữ thường cho một phần của đối sánh:

 string pattern = @"\b(?i:t)he\w*\b";

Ở đây chữ "t" được so khớp không phân biệt chữ hoa chữ thường, nhưng phần còn lại phân biệt chữ hoa chữ thường. Nếu bạn không chỉ định một biểu thức con, tùy chọn được đặt cho phần còn lại của nhóm bao quanh.

Vì vậy, đối với ví dụ của bạn, bạn có thể có:

string pattern = @"My name is (?i:taylor).";

Điều này sẽ khớp với "Tên tôi là TAYlor" nhưng không khớp với "TÊN TÔI LÀ taylor".

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.