2014-09-16 2 views
1

У меня есть образец podfile.lock, как показано ниже:Рубин - Разбираем данные зависимостей от Podfile.lock

PODS: 
- MyLibrary1 (0.10.0): 
    - MyLibrary1A (>= 0.9.0) 
- AFNetworking (1.1.0) 
- MyLibrary2 (3.0.0) 
- Objective-C-HMTL-Parser (0.0.1) 

DEPENDENCIES: 
- MyLibrary1 (= 0.10.0) 
- AFNetworking (= 1.1.0) 
- MyLibrary2 (= 3.0.0) 
- Objective-C-HMTL-Parser (= 0.0.1) 

SPEC CHECKSUMS: 
    MyLibrary1: 1d65fa5d905211c8981a11091eae8c98b410eb19 
    AFNetworking: 761a418233d280c1e0580bcb76ff9cb4c3073d17 
    MyLibrary2: 35b80d5cc522b0f53beb5583c635e42ecce69743 
    Objective-C-HMTL-Parser: 4fca85e186a829cfe8db8e316e9688571ea4dfed 

COCOAPODS: 0.16.9 

ТРЕБОВАНИЕ:

Я хочу, чтобы данные между данными зависимостей в формате JSON то есть что-то вроде:

{ 
"MyLibrary1": "0.10.0", 
"AFNetworking": "1.1.0", 
"MyLibrary2": "3.0.0", 
"Objective-C-HMTL-Parser": "0.0.1" 
} 

ЧТО Я Д.И. D:

Я пытаюсь получить данные в "ЗАВИСИМОСТИ:" первое, используя регулярное выражение:

start_string = "DEPENDENCIES:" 
    end_string = "SPEC CHECKSUMS:" 
    file_contents[/#{start_string}(.*?)#{end_string}/m, 1] 

С этим я получаю:

"\n - MyLibrary1 (= 0.10.0)\n - AFNetworking (= 1.1.0)\n - MyLibrary2 (= 3.0.0)\n - Objective-C-HMTL-Parser (= 0.0.1)\n\n" 

ВОПРОС:

С приведенным выше результатом регулярного выражения, как/что такое e Как получить/отделить «MyLibrary1» и «0.10.0», чтобы сделать JSON?

+0

Не знаю, как вы получили этот результат, используя модификатор многострочный, но, как правило, для этого требуемого действия требуется два регулярных выражения. У вас уже есть, а затем другой для анализа этого результата для каждого ключа/значения. – sln

+0

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

+0

На самом деле не самый быстрый способ, если Python не поддерживает конструкцию '\ G' или не создает коллекции' Capture Collections' (уникальной для Dot-Net). – sln

ответ

3

Вы можете использовать \G якорь, который обозначает положение в конце последнего матча:

rubular

data.scan /(?:\G(?!\A)|^DEPENDENCIES:\n)- (\S+) \(= ([^)]+)\)\n/ 
=> [["MyLibrary1", "0.10.0"], ["AFNetworking", "1.1.0"], ["MyLibrary2", "3.0.0"], ["Objective-C-HMTL-Parser", "0.0.1"]] 
+0

+1 Итак, Ruby поддерживает якорь '\ G'. Это похоже на Perl, может ли это быть рекурсия/условные выражения/branch_reset? – sln

+0

@sln: он может выполнять рекурсию, условные обозначения, но не сбросить ветвь. Он также имеет функцию '\ K'. –

Смежные вопросы