Не удается найти подстроку в групповом регулярном выражении

#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] )"