Python, сопоставляющий несколько символов в строку - PullRequest
0 голосов
/ 28 мая 2010

Я пытаюсь извлечь / сопоставить данные из строки с помощью регулярного выражения, но, похоже, я не понимаю.

Я не хочу извлекать из следующей строки i386 (текст между последним - и .iso):

/xubuntu/daily/current/lucid-alternate-i386.iso

Это также должно работать в случае:

/xubuntu/daily/current/lucid-alternate-amd64.iso

И результат должен быть либо i386, либо amd64 в зависимости от случая.

Большое спасибо за вашу помощь.

Ответы [ 7 ]

3 голосов
/ 28 мая 2010

Вы также можете использовать split в этом случае (вместо регулярного выражения):

>>> str = "/xubuntu/daily/current/lucid-alternate-i386.iso"
>>> str.split(".iso")[0].split("-")[-1]
'i386'

split дает вам список элементов, по которым ваша строка получила «split». Затем, используя Python синтаксис , вы можете перейти к соответствующим частям.

1 голос
/ 28 мая 2010

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

s1 = "/xubuntu/daily/current/lucid-alternate-i386.iso"
s2 = "/xubuntu/daily/current/lucid-alternate-amd64.iso"

pattern = re.compile(r'^.+-(.+)\..+$')

m = pattern.match(s1)
m.group(1)
'i386'

m = pattern.match(s2)
m.group(1)
'amd64'
1 голос
/ 28 мая 2010

Прежде всего, давайте упростим нашу жизнь и получим только имя файла.

>>> os.path.split("/xubuntu/daily/current/lucid-alternate-i386.iso")
('/xubuntu/daily/current', 'lucid-alternate-i386.iso')

Теперь нужно просто перебрать все буквы между последней чертой и '.iso'.

1 голос
/ 28 мая 2010
r"/([^-]*)\.iso/"

Требуемый бит будет в первой группе захвата.

0 голосов
/ 28 мая 2010
>>> import os
>>> path = "/xubuntu/daily/current/lucid-alternate-i386.iso"
>>> file, ext = os.path.splitext(os.path.split(path)[1])
>>> processor = file[file.rfind("-") + 1:]
>>> processor
'i386'
0 голосов
/ 28 мая 2010
reobj = re.compile(r"(\w+)\.iso$")
match = reobj.search(subject)
if match:
    result = match.group(1)
else:
    result = ""

Тема содержит имя файла и путь.

0 голосов
/ 28 мая 2010

Выражение должно быть без начальных косых черт.

import re

line = '/xubuntu/daily/current/lucid-alternate-i386.iso'
rex = re.compile(r"([^-]*)\.iso")
m = rex.search(line)
print m.group(1)

Выход 'i386'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...