Постоянная накопленная сумма повторений для нескольких символов в регулярном выражении (python) - PullRequest
0 голосов
/ 02 декабря 2018

Я хотел бы найти выражение, которое начинается с 1, 2 или 3 цифр, а затем продолжается комбинацией пробелов и тире -.Однако длина выражения должна составлять не более 4 символов, что дает возможные комбинации следующего вида: «123-», «1 -», «66 - »и т. Д. Я уверен, что на этот вопрос уже есть ответ где-то, но я не могу сформулировать свою проблему достаточно кратко, чтобы что-то найти.

Короче говоря, формулировка следующего вида была бы идеальной: [0-9]{1,3}[ -]{1,3}{{4}}, где 4 указывает, что общая сумма должнане превышает 4.

Конечно, я всегда могу набрать [0-9][ -]{3}|[0-9]{2}[ -]{2}|[0-9]{3}[ -], но, поскольку он выполняет работу в этом сценарии, это быстро станет головной болью, чтобы перечислить все отдельные случаи для более длинных наборовсимволов.

1 Ответ

0 голосов
/ 03 декабря 2018

Вы можете использовать

String regex = "\\b\\d{1,3}[ -]{1,3}(?<=\\b\\d[\\d -]{3})";

Подробности

  • \b - граница слова (может быть заменена на (?<!\d), если числа могутбыть приклеенным к буквам или _)
  • \d{1,3} - от 1 до 3 цифр
  • [ -]{1,3} - от 1 до 3 пробелов или дефисов
  • (?<=\\b\\d[\\d -]{3}) - aположительный взгляд, который требует, чтобы непосредственно слева от текущего местоположения была цифра, а затем 3 цифры, пробелы или дефисы.

См. эту демонстрационную версию Java .

String s = "123-      1 -  66 -  ";
Pattern pattern = Pattern.compile("\\b\\d{1,3}[ -]{1,3}(?<=\\b\\d[\\d -]{3})");
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
    System.out.println("'" + matcher.group(0) + "'"); 
} 

Выход:

'123-'
'1 - '
'66 -'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...