2013-09-05 29 views
11

Tôi đang sử dụng regex này:Regex tùy chọn nhóm

((?:[a-z][a-z]+))_(\d+)_((?:[a-z][a-z]+)\d+)_(\d{13}) 

để phù hợp với chuỗi như thế này:

SH_6208069141055_BC000388_20110412101855 

chia thành 4 nhóm:

SH 
6208069141055 
BC000388 
20110412101855 

Câu hỏi: thế nào Tôi làm cho nhóm đầu tiên tùy chọn, sao cho nhóm kết quả là một chuỗi rỗng?
Tôi muốn nhận 4 nhóm trong mọi trường hợp, khi có thể.

chuỗi đầu vào cho trường hợp này: (không có gạch dưới sau khi nhóm đầu tiên)

6208069141055_BC000388_20110412101855 

Trả lời

10

Bạn có thể dễ dàng đơn giản hóa regex của bạn sẽ được này:

(?:([a-z]{2,})_)?(\d+)_([a-z]{2,}\d+)_(\d+)$ 

Tôi không chắc liệu đầu vào chuỗi không có nhóm đầu tiên sẽ có dấu gạch dưới hoặc không, nhưng bạn có thể sử dụng regex ở trên nếu đó là toàn bộ chuỗi.

regex101 demo

Như bạn có thể thấy, các nhóm phù hợp 1 trong trận đấu thứ hai là trống rỗng và bắt đầu từ nhóm phù hợp 2.

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