Вы можете использовать шаблон регулярного выражения (?i)(\\d+)(?:(?:(?:\\s*)(,|and|through)(?:\\s*))|.*$)
.Следующий пример кода:
final String ps = "(?i)(\\d+)(?:(?:(?:\\s*)(,|and|through)(?:\\s*))|.*$)";
final Pattern p = Pattern.compile(ps);
for (String s : new String[] {
"A list of items 1, 2 and 5 containing blah blah blah.",
"According to items 2 THROUGH 11 there will be blah blah."})
{
System.out.println("***** TEST STRING *****\n" + s + "\n");
final Matcher m = p.matcher(s);
int cnt = 0;
while (m.find()) {
System.out.println(++cnt + ": G1: " + m.group(1) + " G2: "
+ m.group(2));
}
System.out.println("");
}
Будет выводить:
***** TEST STRING *****
A list of items 1, 2 and 5 containing blah blah blah.
1: G1: 1 G2: ,
2: G1: 2 G2: and
3: G1: 5 G2: null
***** TEST STRING *****
According to items 2 THROUGH 11 there will be blah blah.
1: G1: 2 G2: THROUGH
2: G1: 11 G2: null
Вы можете использовать группу 1 для получения номера и группу 2, чтобы определить, каким будет ваш следующий шаг: ,
и and
для включения следующего числа в ваш список, through
для включения диапазона и null
, когда больше нет чисел.