Разделить строку в Python на основе непрерывного целого числа, символов и числа с плавающей запятой - PullRequest
1 голос
/ 01 ноября 2019

У меня есть строка, которая имеет 4 раздела без пробелов: enter image description here

В первом разделе может быть 3-5 букв, за которыми следуют 6 цифр, за которыми следует буква «A»с последующим плавающим числом. Типичная строка может быть ABCD192014A82.5 или ABC192014A82.5 или ABCDE192014A82.5

Я хотел бы разбить эту строку наподстроки как 'ABCD', '192014', 'A' и '82 .5 '

Я попробовал следующий код, но это прекрасно работает, если в первом разделе нет «A». Итак, строка CDBF192014A82.5 разделена правильно, но строка ADBF192014A82.5 имеет проблемы, потому что, я думаю, в первой строке есть буква A. Есть предложения?

re.match(r"([a-z]+)([0-9]+)", MyString.split('A')[0], re.I)

Ответы [ 2 ]

1 голос
/ 01 ноября 2019

Использование re.split с группой захвата:

l = ['ABCD192014A82.5', 'ABC192014A82.5', 'ABCDE192014A82.5']
for i in l:
    print(i, re.split('([A-Z]+)', i)[1:])

Вывод:

ABCD192014A82.5 ['ABCD', '192014', 'A', '82.5']
ABC192014A82.5 ['ABC', '192014', 'A', '82.5']
ABCDE192014A82.5 ['ABCDE', '192014', 'A', '82.5']
1 голос
/ 01 ноября 2019

Попробуйте:

>>> for testcase in [
        'ABCD192014A82.5',
        'ABC192014A82.5',
        'ABCDE192014A82.5',
        'CDBF192014A82.5',
        'ADBF192014A82.5'
]:
    components = re.match(r'([A-Za-z]{3,5})(\d{6})(A)([0-9.]{3,4})', testcase).groups()
    print(testcase, *components, sep='\t')


ABCD192014A82.5 ABCD    192014  A   82.5
ABC192014A82.5  ABC 192014  A   82.5
ABCDE192014A82.5    ABCDE   192014  A   82.5
CDBF192014A82.5 CDBF    192014  A   82.5
ADBF192014A82.5 ADBF    192014  A   82.5

Части регулярного выражения:

 [A-Za-z]{3,5}          # 3 to 5 letters
 \d{6}                  # 6 digit integer
 A                      # Letter 'A'
 [0-9.]{3,4}            # 3 to 4 digit float
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...