Regex для добавления цифр в Alphanumeri c In Python - PullRequest
1 голос
/ 30 января 2020

Как добавить три цифры в строке alphanumeri c, используя регулярные выражения в Python?

Например, я хочу добавить три нуля после знака da sh -, но перед последним di git в строке, чтобы вместо A1-1 было A1-0001.

Мое предположение было:

df['column'].str.replace('(^C3-\d{1)$)', ???)

Ответы [ 2 ]

1 голос
/ 30 января 2020

Вот альтернатива без регулярных выражений:

df = pd.DataFrame({'C': ['A2-2', 'A3-001', 'C3-1', 'C3-12', 'C3-123', 'C3-1234']})
df

Вывод:

    C
0     A2-2
1   A3-001
2     C3-1
3    C3-12
4   C3-123
5  C3-1234
df.C = df.C.apply(lambda _: _[:_.index('-') + 1] + _[_.index('-') + 1:].zfill(4))
df

Вывод:

    C
0  A2-0002
1  A3-0001
2  C3-0001
3  C3-0012
4  C3-0123
5  C3-1234
1 голос
/ 30 января 2020

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

df['column'] = df['column'].str.replace(r'^(C3-)(\d)$', r'\g<1>000\2')

См. Демоверсию regex . Если C может быть любой заглавной буквой ASCII, замените ее на [A-Z].

или чуть более обобщенно c для 1-3 ди git чисел:

df['column'] = df['column'].str.replace(r'^(C3-)(\d{1,3})$', lambda x: "{}{}".format(x.group(1), x.group(2).zfill(4))) 

Подробности

  • ^ - старт
  • (C3-) - группа 1: C3-
  • (\d) - группа 2: a di git (\d{1,3} соответствует 1–3 цифрам)
  • $ - конец строки
  • \g<1> - значение группы 1
  • 000 - три нуля
  • \2 - значение группы 2

A Python тест:

import pandas as pd
df = pd.DataFrame({'column': ['C3-1', 'C3-12', 'C3-123', 'C3-1234']})
df['column'] = df['column'].str.replace(r'^(C3-)(\d{1,3})$', lambda x: "{}{}".format(x.group(1), x.group(2).zfill(4))) 

Выход:

>>> df
    column
0  C3-0001
1  C3-0012
2  C3-0123
3  C3-1234
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...