Регулярное выражение для трех чисел - PullRequest
0 голосов
/ 24 июня 2018

Я создал регулярное выражение, которое будет соответствовать 2 числам в любом порядке из четырехзначного числа. Я пытаюсь создать регулярное выражение, которое может вычислить 3 числа из четырехзначного числа в любом порядке. Ниже приведено то, что я сейчас использую для сопоставления двух чисел:

regEx01 = re.compile(r'\b[0-9]*(?:0[0-9]*[0-9]?1|1[0-9]*[0-9]?0)[0-9]*\b')

Совпадения 0 и 1 в 7019, 8019, 2160.

Будущее регулярное выражение должно соответствовать 0, 1 и 2.

7012 positive
0190 negative
9201 positive
1226 negative

Любое направление будет с благодарностью.

1 Ответ

0 голосов
/ 24 июня 2018

Вы можете использовать регулярное выражение, основанное на положительных взглядах, чтобы сделать его лаконичным:

\b(?=\d*0)(?=\d*1)(?=\d*2)\d+\b

См. Демонстрационный пример регулярного выражения .

Подробности

  • \b - граница слова
  • (?=\d*0) - положительный прогноз, требующий 0 после нуля или более цифр
  • (?=\d*1) - требует1
  • (?=\d*2) - требуется 2
  • \d+ - 1+ цифр
  • \b - граница слова

Или, чтобы увеличить производительность, замените \d* s на «вычтенные» значения:

r'\b(?=[1-9]*0)(?=[02-9]*1)(?=[013-9]*2)\d+\b'

См. это демонстрационное выражение регулярного выражения

Здесь (?=[1-9]*0) быстро проверяетесли после 0+ цифр от 1 до 9 есть 0, (?=[02-9]*1) проверяет 1 и (?=[013-9]*2) проверяет 2 аналогичным образом.

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