Выражение регулярного выражения, чтобы исключить любое число из любого места - PullRequest
0 голосов
/ 17 февраля 2019

У меня есть код, который принимает строку в качестве ввода и отбрасывает все буквы и печатает только те цифры, которые не содержат 9 в любом месте.Я решил сделать это с помощью регулярных выражений, но не смог найти рабочее выражение для его достижения там, где его нужно изменить?

Я также пытался с [^ 9], но это не такработа.

import re

s=input().lstrip().rstrip()
updatedStr=s.replace(' ','')
nums=re.findall('[0-8][0-8]',updatedStr)
print(nums)

Код должен полностью отбрасывать число, которое содержит 9 в любом месте.

, например, для ввода: "Это 67 и 98"

вывод: ['67']

вход: "Это число 678975, или 56783, или 87290, вот и все"

вывод: ['56783'] (так как два других числа содержат9 местами)

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Похоже, вы не хотите совпадать со всеми числами, которые не содержат 9. Ваш шаблон должен соответствовать любой строке цифр, которая не содержит девять, но заканчивается и начинается с нецифровой цифры

pattern = re.compile('(?<=[^\d])[0-8]+(?=[^\d])')
pattern.findall(inputString) # Finds all the matches

Здесь паттерн делает несколько вещей.

  1. (? <= ...) - позитивный взгляд.Это означает, что мы получим только те совпадения, которые не содержат цифр перед ним. </li>
  2. [0-8] + будет соответствовать 1 или более цифрам, за исключением того, что 9
  3. (? = ...) являетсясмотреть вперед.Мы будем получать только те совпадения, которые заканчиваются не цифрой.

Примечание:

inputString не нужно удалять.И на самом деле этот шаблон может столкнуться с проблемами, если в начале или конце строки есть число.Чтобы предотвратить это.просто добавьте в него любые символы.

inputString = ' ' + inputString + ' '

Посмотрите на питона re docs для получения дополнительной информации

0 голосов
/ 17 февраля 2019

Я думаю, вы должны попытаться использовать:

nums=re.findall('[0-8]+',updatedStr)

Вместо.

[0-8] + означает " одно или несколько вхожденийчисло от 0 до 8 "

Я пробовал: 12313491 a asfasgf 12340 asfasf 123159

И получил: ['123134', '1', '12340', '12315']

(Ваш код возвращает массив. Если вы хотите объединить числа, вам нужно добавить код)

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