В .NET, регулярное выражение не организует захваты, как я ожидал. (Я не буду называть это ошибкой, потому что, очевидно, кто-то это намеревался. Однако я не ожидал, что это сработает, и не считаю это полезным).
Это регулярное выражение для ингредиентов рецепта (упрощенно для примера):
(?<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
Моя строка: 3 tbsp 1/2 tsp
Результирующие группы и захваты:
[измерение] [0] = 3 столовые ложки
[измерение] [ 1 ] = 1/2 чайной ложки
[целое число] [0] = 3
[numtor] [ 0 ] = 1
[dentor] [ 0 ] = 2
[единица измерения] [0] = столовая ложка
[Единица измерения] [ 1 ] = ч.л
Обратите внимание, что хотя 1/2 tsp
находится во 2-м захвате, его части находятся в [0]
, поскольку эти места ранее не использовались.
Есть ли способ получить все части с предсказуемыми полезными индексами без необходимости повторного запуска каждой группы через регулярное выражение?