Разделить строку по шаблону в Python (не в начале или в конце) - PullRequest
0 голосов
/ 02 мая 2019

Я пытаюсь разбить строку, когда в Python есть дефис и цифра.

Пример -

'ABC7-8-1234: Veggie - RESTRICTED (1)' -> ['ABC7','234: Veggie - RESTRICTED (1)']
'AB-WALT-9-2065: Application (6)` -> ['AB-WALT', '065: Application (6)']

Как шаг 1 - я попытался повторно.split (), чтобы разделить на '-'.но это не работает


    name = re.split(r"\B-", string)

Я получаю ['ABC7-8-1234: Veggie ', ' RESTRICTED (1)'] в качестве вывода вместо ['ABC7','8','1234: Veggie ', ' RESTRICTED (1)'].

Шаг 2 будет проверять наличие дефиса и цифры.как - [0-9]

Как мне решить эту проблему?

Ответы [ 3 ]

1 голос
/ 02 мая 2019

Вы можете сначала разделить вашу строку с помощью : и взять нулевой индекс, а затем разделить эту строку с помощью регулярного выражения -\d+-, и вы должны получить желаемые значения, как вы разместили в своем вопросе. Смотрите этот код Python,

import re

arr = ['ABC7-8-1234: Veggie - RESTRICTED (1)', 'AB-WALT-9-2065: Application (6)']

for s in arr:
 print(re.split(r'-\d+-', re.split(':', s)[0]))

печать

['ABC7', '1234']
['AB-WALT', '2065']

В качестве альтернативы вы также можете использовать это регулярное выражение и получить значения из group1 и group2,

^(.+?)-\d+-([^:]+)

Regex Demo

код Python,

import re

arr = ['ABC7-8-1234: Veggie - RESTRICTED (1)', 'AB-WALT-9-2065: Application (6)']

for s in arr:
 m = re.search(r'^(.+?)-\d+-([^:]+)', s)
 if m:
  print([m.group(1), m.group(2)])

печать

['ABC7', '1234']
['AB-WALT', '2065']
0 голосов
/ 02 мая 2019

Использование регулярного выражения с группой без захвата (?:):

s1='ABC7-8-1234: Veggie - RESTRICTED (1)' 
re.split(r"(?:-\d)+",s1)                                               
Out: ['ABC7', '234: Veggie - RESTRICTED (1)']

Сохранение числа из шаблона разделителя:

re.split(r"-(\d)",s1)                                                  
Out: ['ABC7', '8', '', '1', '234: Veggie - RESTRICTED (1)']

Вы получаете пустые строки, если есть последовательные шаблоны.

Использование положительного взгляда:

re.split(r"-(?=\d)",s1)                                                
Out: ['ABC7', '8', '1234: Veggie - RESTRICTED (1)']
0 голосов
/ 02 мая 2019

Для полного ответа:

st='ABC7-8-1234: Veggie - RESTRICTED (1)'
st=re.search('(.*):.*', st).group(1)
re.split('-\d-', st)

Out[26]: ['ABC7', '1234']
...