tôi biết rằng []
biểu thị một tập hợp các ký tự cho phép -chênh lệch b/w [ab] và (a | b) trong đối sánh regex?
>>> p = r'^[ab]$'
>>>
>>> re.search(p, '')
>>> re.search(p, 'a')
<_sre.SRE_Match object at 0x1004823d8>
>>> re.search(p, 'b')
<_sre.SRE_Match object at 0x100482370>
>>> re.search(p, 'ab')
>>> re.search(p, 'ba')
Nhưng ... hôm nay tôi tình cờ gặp một biểu hiện bằng các thanh dọc trong ngoặc để xác định mô hình loại trừ lẫn nhau -
>>> q = r'^(a|b)$'
>>>
>>> re.search(q, '')
>>> re.search(q, 'a')
<_sre.SRE_Match object at 0x100498dc8>
>>> re.search(q, 'b')
<_sre.SRE_Match object at 0x100498e40>
>>> re.search(q, 'ab')
>>> re.search(q, 'ba')
Điều này có vẻ để bắt chước các chức năng tương tự như trên, hoặc tôi thiếu một cái gì đó?
PS: Trong số Python
, dấu ngoặc đơn được sử dụng để xác định nhóm hợp lý của văn bản phù hợp. Nếu tôi sử dụng kỹ thuật thứ hai, thì làm cách nào để sử dụng dấu ngoặc đơn cho cả hai công việc?
Không chắc về những gì bạn có ý nghĩa với các bit ngoặc ... –
Vâng, bạn là chính xác - '[ab]' và '(một | b) 'cả hai kết hợp _exactly_ cùng một điều (nhưng cái đầu tiên sẽ khớp nhanh hơn). Các biểu thức chính quy là một ngôn ngữ cho chính chúng (cho dù bạn tìm thấy chúng bằng Python hay Perl) và bạn cần phải tìm hiểu cú pháp (khó hiểu) của chúng nếu bạn định sử dụng chúng một cách hiệu quả. (ví dụ: Dấu ngoặc đơn bên trong một regex không giống như dấu ngoặc đơn bên ngoài regex.) Tôi khuyên bạn nên làm theo hướng dẫn tại [regular-expressions.info] (http://www.regular-expressions.info). Bất kỳ thời gian nào ở đó sẽ được thưởng nhiều lần. – ridgerunner