Я отправил предыдущий ответ, где я неправильно понял часть вашего вопроса. Так что это повторение.
Честно говоря, это лучший Regex себе:
(\d+(?:[.,]\d+)?)\s*[xX*/\\]\s*(\d+(?:[.,]\d+)?)(?:\s*[xX*/\\]\s*(\d+(?:[.,]\d+)?))?
Почему? Потому что с этим утверждением у вас есть группа 1, группа 2 и группа 3, из которых вы можете вывести три значения (третий может иногда быть пустым, очевидно). Если вы используете кванторы для повторения подвыражения, вам придется попасть в коллекцию групп, и ваш код станет беспорядочным.
В чем разница между моей длинной и длинной? Ну, у длинного выше есть лучшее управление для «десятичных знаков», в то время как у вас будут неправильные номера, такие как «382.».
Но если короче маршрут вы хотите принять, то Regex будет:
(\d+(?:[.,]\d+)?)(?:\s*[xX*/\\]\s*(\d+(?:[.,]\d+)?)){1,2}
В этом случае ваш код может тянуть первое значение из группы 1, но тогда придется использовать группу чтобы увидеть, есть ли у группы 2 стек или только одно значение. Если это стек, возьмите элемент сбора коллекции 0 для значения 2, затем возьмите элемент сбора 1 для значения 3.
Эти регулярные выражения очень похожи на Stema's, за исключением того, что они организуют группы захвата.
The Breakdown:
( //Capture Group 1 - Begin
\d+ //Require Digits
(?: //Non Capture Sub Expression
[.,]\d+ //Allow a "Decimal", but if it exists, Require Digits after it
)? //Optional Quantifier for the "decimal" sub-expression
) //Capture Group 1 - End
(?: //Non Capture Sub Expression
\s* //Optionally capture space(s)
[xX*/\\] //Require a Separator
\s* //Optional capture space(s)
( //Capture Group 2 - Begin
\d+ //Require Digits
(?: //Non Capture Sub Expression
[.,]\d+ //Allow a "Decimal", but if it exists, Require Digits after it
)? //Optional Quantifier for the "decimal" sub-expression
) //Capture Group 2 - End
){1,2} //Require at least one Separator/Digit pattern, but allow two
Опять же, разница между моим "коротким" ответом и Stema, является только что шахта обрабатывает "Десятичную" более уместно. Но вы можете не требовать дополнительной безопасности, и в этом случае stema's в порядке. Кроме того, используйте выражения non-capture, когда вы просто используете подвыражение для группировки или повторения, и не хотите его захватывать. В конечном итоге добавление значений в эти стеки немного влияет на скорость обработки.
Так что, если вы не заботитесь о группах захвата, совершенстве обработки или правильной обработке после запятой ... и все, что вы хотите, это кратчайшее регулярное выражение, Stema поражает гвоздь на голове.
Вы можете использовать следующее [regex] (http://regex101.com/r/wM6qV6). – HamZa
Почему это должно быть одно регулярное выражение? Вы можете разбить его на 4 разных, каждый из которых намного проще, чем у вас. – Oded
Хороший сайт, но это иронично, хотя в Интернете используется регулярное выражение для поиска шаблона регулярных выражений для описания синтаксиса regex – Fendy