Trong .NET, regex không tổ chức chụp như tôi mong đợi. (Tôi sẽ không gọi đây là một lỗi, bởi vì rõ ràng là ai đó dự định nó. Tuy nhiên, đó không phải là cách tôi mong đợi nó hoạt động cũng như tôi thấy nó hữu ích.).NET regex không theo thứ tự mong đợi
Regex này là dành cho thành phần công thức (đơn giản hóa vì lợi ích ví dụ):
(?<measurement> # begin group
\s* # optional beginning space or group separator
(
(?<integer>\d+)| # integer
(
(?<numtor>\d+) # numerator
/
(?<dentor>[1-9]\d*) # denominator. 0 not allowed
)
)
\s(?<unit>[a-zA-Z]+)
)+ # end group. can have multiple
chuỗi của tôi: 3 tbsp 1/2 tsp
nhóm Kết quả và chụp:
[đo lường] [0] = 3 muỗng canh
[đo lường] [] = 1/2 tsp
[nguyên] [0] = 3
[numtor] [] = 1
[dentor] [] = 2
[đơn vị] [0] = tbsp
[đơn vị] [] = tsp
Thông báo như thế nào mặc dù 1/2 tsp
là trong Capture 2, đó là bộ phận trong [0]
vì những đốm là previousl y không sử dụng.
Có cách nào để đưa tất cả các phần có chỉ mục hữu ích dự đoán được mà không cần phải chạy lại từng nhóm thông qua regex một lần nữa?
'/' không có ý nghĩa đặc biệt trong các regex. Một số hương vị sử dụng nó như một dấu phân cách cho các chữ * regex * (ví dụ như JavaScript), nhưng trong .NET nó chỉ là một ký tự khác; bạn không cần phải thoát khỏi nó. –
Cảm ơn bạn đã dành thời gian trả lời, nhưng tôi không cần phân tích regex - chỉ ở đây để hiển thị vấn đề được đề cập. – Dinah