#java #regex
#java #регулярное выражение
Вопрос:
Я пытаюсь найти подстроку, которая выглядит как "3/4"
(любое число 0-9 для числителя и знаменателя). Однако текст, который я пытаюсь проанализировать, может содержать только a "/4"
, если его 1/4. В этих случаях меня не волнует "/"
, и мне нужен только знаменатель. Мое текущее регулярное выражение "[0-9?\/0-9]"
, но оно возвращает '3/4'
одно за другим, когда я хотел, чтобы оно было сгруппировано вместо этого.
У кого-нибудь есть исправление для этого?
Большое спасибо!
Ответ №1:
Это регулярное выражение:
[0-9?/0-9]
это символьный класс, который соответствует одной цифре, вопросительному знаку или косой черте. Вы хотите это:
[0-9]?/[0-9]
или это:
d?/d
Ответ №2:
Я думаю, вы хотите использовать канал для создания или:
([0-9]/[0-9])|/([0-9])
Недостатком этого подхода, однако, было бы то, что вам нужно было бы проверить, вернула ли группа 1 или 2 совпадение… итак, если бы у вас была полная дробь, вы получили бы результат в первой группе, если бы вы сопоставили знаменатель, знаменатель появился бы во второй группе.
Может иметь больше смысла:
([0-9]*/[0-9])
А затем проверьте длину каждого совпадения и удалите ‘/’, если нужно.
Ответ №3:
используйте группу захвата через ( )
оператор
[0-9]?/([0-9])
Ответ №4:
Попробуйте это вместо:
"([0-9]*\?[0-9] )"