Regex или другой метод для анализа объявления метода Obj- C - PullRequest
1 голос
/ 13 июля 2020

У меня есть метод Objective- C в форме

"hideAlertWithBundleId:(NSString *)bundleId uuid:(NSString *)uuid"

, но он также может быть записан в такой форме

"hideAlertWithBundleId: (NSString *) bundleId uuid: (NSString *) uuid"

, и я хочу извлечь

["hideAlertWithBundleId:(NSString *)bundleId", "uuid:(NSString *)uuid"]

У меня возникли проблемы с использованием чистого python и регулярного выражения для достижения этого, но я знаю, что это возможно.

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

"findImageWithKey:(id)arg1 inGroup:(id)arg2 andInfo:(img*)arg3"

Можно предположить, что в строке нет символов новой строки. Решение должно работать для метода с любым количеством аргументов.

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

1 Ответ

1 голос
/ 13 июля 2020

Я не так хорошо знаком с Objective- C, но если я правильно понимаю проблему, как насчет:

import re
for str in ["hideAlertWithBundleId:(NSString *)bundleId uuid:(NSString *)uuid",
    "hideAlertWithBundleId:   (NSString *)  bundleId         uuid: (NSString *) uuid",
    "-(BOOL)findImageWithKey:(id)arg1 inGroup:(id)arg2 andInfo:(img*)arg3"]:
    result = re.findall(r'((?:-\s*\(\w+\)\s*)?\w+)\s*:\s*(\(\w+\s*\*?\))\s*(\w+)', str)
    result2 = [i[0] + ":" + i[1] + i[2] for i in result]
    print(result2)

Результат:

['hideAlertWithBundleId:(NSString *)bundleId', 'uuid:(NSString *)uuid']
['hideAlertWithBundleId:(NSString *)bundleId', 'uuid:(NSString *)uuid']
['-(BOOL)findImageWithKey:(id)arg1', 'inGroup:(id)arg2', 'andInfo:(img*)arg3']
...