Соответствующее число в регулярном выражении между? - PullRequest
0 голосов
/ 18 января 2019

Я хотел бы получить число между этими строками.

strings = ["point_right: account ISLAMIC: 860328 9221 asdsad",
       "account 723123123",
       "account823123213",
       "account 823.123.213",
       "account 823-123-213",
       "account:123213123 ",
       "account: 123213123 asdasdsad 017-299906",
       "account: 123213123",
       "point_right: account ISLAMIC: 860328 9221"
      ]

Результат будет

[860328 9221,723123123, 823123213, 823.123.213, 823-123-213, 123213123, 123213123, 123213123]

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

for string in strings:
    print(re.findall("(?<=account)(.*)", string.lower()))

Помогите, пожалуйста, дать несколько указателей на матч с регулярным выражением.

Ответы [ 3 ]

0 голосов
/ 18 января 2019
(?!\W)([\d\s.-]+)(?<!\s)

Негативные взгляды вперед и назад выглядят как излишества, но в противном случае я не смог получить чистый матч. Вы можете увидеть результаты здесь

(?!\W) Отрицательный взгляд на исключение любых несловарных символов [^a-zA-Z0-9_]

([\d\s.-]+) Группа захвата для ваших номеров

(?<!\s) Отрицательный взгляд за исключением пробельных символов [\r\n\t\f\v ]

0 голосов
/ 18 января 2019

Если числа должны быть первыми числами после подстроки account, используйте

re.findall("account\D*([\d\s.-]*\d)", s)

См. Демонстрационную версию Python и демонстрационную версию regex .

Детали шаблона

  • account - буквальная подстрока
  • \D* - 0+ символов, кроме цифр
  • ([\d\s.-]*\d) - Группа захвата 1 (значение, возвращаемое re.findall): 0 или более цифр, пробелы, символы . и -, за которыми следуют цифры.
0 голосов
/ 18 января 2019

Попробуйте этот шаблон:

(?=[^0-9]*)[0-9][0-9 .-]*[0-9]

Разбивка:

  • (?=[^0-9]*) В поисках слова, например "account", несоответствие
  • [0-9] Найти цифру
  • [0-9 .-]* Найдите любое количество цифр или специальных символов (в ваших строках есть пробелы, тире, точки, поэтому я их включил)
  • [0-9] Найти еще одну цифру (чтобы в конце не было пробелов)

Проверьте это здесь и образец кода здесь

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