Как разобрать строку в две разные строки на основе первого экземпляра целого числа?(Python) - PullRequest
0 голосов
/ 09 ноября 2011

Я пытаюсь взять строку типа "PR405j" и разделить ее на две строки. В этом случае две строки будут «PR» и «405j». Есть множество строк, с которыми я должен это сделать. Exmaples: «ACR498» будет «ACR», а «498», «FR707e» будет «FR» и «707e», «TY699l» будет «TY» и «699l» и т. Д. И т. Д. И т. Д.

У меня проблема с отделением первой части от второй. Количество символов на каждой стороне отличается, и вторая строка (с цифрами) может содержать или не содержать буквенные символы. Единственная общность между всеми этими строками состоит в том, что вы можете разделить их на основе первого целого числа.

Я думал, что цикл for, который проходит через каждый символ в исходной строке и строит две отдельные строки внутри, будет работать, но я мог думать только о том, чтобы основывать разделение на целых и буквенных символах, что сделало бы что-то вроде поворота "PR405j" в "PRj" и "405".

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

Наконец, я не могу разбить строки на основе количества буквенных символов в начале строки (скажем, 2 для «PR405j»), потому что есть различия между строками.

Если бы кто-нибудь мог мне помочь с этим, я был бы очень признателен. Спасибо!

Ответы [ 3 ]

5 голосов
/ 09 ноября 2011

Вы можете использовать регулярные выражения для простого сопоставления строк, такого как этот. Выражение «(\ D +) (. +)» Говорит: «Извлеките одну или несколько не цифр в качестве первой группы, а затем извлеките один или несколько других символов в качестве второй».

import re

inputs = ['PR405j']

for input in inputs:
    match = re.match('(\D+)(.+)', input)

    start = match.group(1)
    end = match.group(2)

    print input, start, end
0 голосов
/ 09 ноября 2011

re.split, как и остальные ответы. Но вы должны разобраться, чтобы разобраться с группировкой:

import re
re.split(r'([a-zA-Z]+)', 'PR405j', 1)[1:]
0 голосов
/ 09 ноября 2011

РЕДАКТИРОВАТЬ: Я неправильно понял вопрос, думал, что вы хотели 3 группы, а не две. Ответ Зак Блума более правильный, но я оставлю это здесь в качестве справки на случай, если у кого-то возникнет аналогичный вопрос.


Вы можете использовать re.split:

>>> re.split(r'(\d+)', 'PR405j')
['PR', '405', 'j']

Хитрость здесь в том, чтобы использовать группу захвата (с круглыми скобками) в качестве регулярного выражения для разделения; это приведет к тому, что выходные данные будут содержать части, которые вызвали разделение, а также части по обе стороны от него. Если у вас есть строка с несколькими группами цифр, разделенных нецифрами, это полностью разделит строку:

>>> re.split(r'(\d+)', 'PR405j123abc')
['PR', '405', 'j', '123', 'abc']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...