Regex: получить все символы после чисел - PullRequest
0 голосов
/ 11 марта 2020

У меня есть список строк, например, такой:

ABC-2345
GGYD3495
EPF_4739
RTY-5678A
QTG138910BC

Как я могу получить: «2345», «3495», «4739», «5678A», «138910B C» ?

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

Ответы [ 6 ]

1 голос
/ 11 марта 2020

Требуется любое количество нецифровых чисел ('\D*'), за которыми следует хотя бы один ди git ('(.*\d.*)'):

import re
strings = ['ABC-2345', 'GGYD3495', 'EPF_4739', 'RTY-5678A', 'QTG138910BC']

[re.findall(r'\D*(.*\d.*)', s)[0] for s in strings]
#['2345', '3495', '4739', '138910BC']

Для каждой строки findall возвращает список подходящих фрагментов. Поскольку в каждой строке имеется только один соответствующий фрагмент, [0] выбирает первый элемент из списка из одного элемента.

1 голос
/ 11 марта 2020

Не могли бы вы попробовать следующее:

import re
lst = ['ABC-2345', 'GGYD3495', 'EPF_4739', 'RTY-5678A', 'QTG138910BC']
lst = [re.sub(r'^[^0-9]*', '', l) for l in lst]
print(lst)

Вывод:

['2345', '3495', '4739', '5678A', '138910BC']

Функция регулярного выражения re.sub(r'^[^0-9]*', '', l) удаляет не-di git символы, начинающиеся с начала l.

1 голос
/ 11 марта 2020

Ниже приведен код, который будет возвращать следующую строку, когда найдет 1-е число:

import re

inp_string = "QTG138910BC"
groups_out = re.search(r'([A-Za-z-_]+)([A-Za-z0-9]+)', inp_string)
print groups_out.groups()  # ('QTG', '138910BC')
print (groups_out.group(2))

Вывод:

138910BC

Ссылка:

https://docs.python.org/3/library/re.html

https://www.regular-expressions.info/tutorial.html

1 голос
/ 11 марта 2020

это зависит от того, есть ли только 4 цифры, как вы предложили, тогда вы можете использовать решение 0m3r:

([0-9]{4})
or
[0-9]+  // if number of characters varies

Или когда могут быть и другие символы, тогда это:

\d\w*\b

\ d начинается с ди git. \ w * принимает все символы после di git, \ b ищет границу слова, в основном совпадая с концом слова

https://regex101.com/r/KTtinh/1

0 голосов
/ 11 марта 2020

Просто сделайте (\ d) + , он извлечет все цифры из строк.

enter image description here

0 голосов
/ 11 марта 2020

Вы можете выполнить поиск по регулярным выражениям по отдельным строкам, получив индекс первого ди git. Затем используйте нарезку строк, чтобы вернуть подстроку, начинающуюся с этого индекса, если она найдена.

import re

l = ['ABC-2345', 'GGYD3495', 'EPF_4739', 'QTG138910BC']
nums = []
for s in l:
   m = re.search(r"\d", s)
   if m:
       nums.append(s[m.start():])

print(nums)

Вывод:

['2345', '3495', '4739', '138910BC']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...