Выражение регулярного выражения, чтобы найти все вхождения 'NSLocalizedString' в содержимом файла - PullRequest
0 голосов
/ 24 января 2019

Контрольные примеры:

// With text and comment
NSLocalizedString(@"Example Text", @"Example Comment");

// With text and no comment
NSLocalizedString(@"Example, text", nil) 

// With text and comment with paranthesis
NSLocalizedString(@"Example text", @"Example (with paranthesis) comment") 

// With property and no comment
NSLocalizedString(test, nil)

// With property and comment
NSLocalizedString(test, @"Example comment")

// Inline
NSLocalizedString(@"Error", nil) NSLocalizedString(@"Change settings", @"Option to change HTTP Post settings") NSLocalizedString(@"Cancel", nil)

Что я ищу: одно совпадение на NSLocalizedString вхождение, с двумя группами захвата (ключ и комментарий).Ключ может иметь значение или быть nil.

То, что я пробовал: r'NSLocalizedString\((.*)\s*,\s*(.*)\)'

Это работает для большинства случаев, за исключением последнего (встроенного), потому что этосоответствует последней запятой.

Regex101: https://regex101.com/r/4OJgU2/6

1 Ответ

0 голосов
/ 25 января 2019

Вы можете решить проблему, используя

r'(?s)NSLocalizedString\(\s*(@\"[^\"\\]*(?:\\.[^\"\\]*)*\"|\w+)\s*,\s*(@\"[^\"\\]*(?:\\.[^\"\\]*)*\"|\w+)\)'

и замена

r'NSLocalizedStringWithDefaultValue(@"elementID", nil, [NSBundle mainBundle], \1, \2)'

Подробности

  • NSLocalizedString\( - NSLocalizedString( подстрока
  • \s* - 0+ пробелов
  • (@\"[^\"\\]*(?:\\.[^\"\\]*)*\"|\w+) - Группа 1:
    • @\"[^\"\\]*(?:\\.[^\"\\]*)*\" - @", за которым следуют 0+ символов, отличных от " и \, за которыми следуют 0+ повторений любого экранированного символа, за которыми следуют 0+ символов, отличных от " и \, а затем " (это шаблон совпадения строкового литерала Obj-C)
    • | - или
    • \w+ - 1+ слово символов
  • \s*,\s* - , заключено в 0+ пробелов
  • (@\"[^\"\\]*(?:\\.[^\"\\]*)*\"|\w+) - группа 2
  • \) - ) char.

См. Демоверсию Python :

import re
strs = ['NSLocalizedString(@"Example Text", @"Example Comment");', 'NSLocalizedString(@"Example, text", nil)', 'NSLocalizedString(@"Example text", @"Example (with paranthesis) comment")', 'NSLocalizedString(test, nil)', 'NSLocalizedString(test, @"Example comment")', 'NSLocalizedString(@"Error", nil) NSLocalizedString(@"Change settings", @"Option to change HTTP Post settings") NSLocalizedString(@"Cancel", nil)']
pat = re.compile(r'NSLocalizedString\(\s*(@\"[^\"\\]*(?:\\.[^\"\\]*)*\"|\w+)\s*,\s*(@\"[^\"\\]*(?:\\.[^\"\\]*)*\"|\w+)\)', re.DOTALL)
repl = r'NSLocalizedStringWithDefaultValue(@"elementID", nil, [NSBundle mainBundle], \1, \2)'
for s in strs:
    print('----------------------------------\n{}\nVVVVVVVVVVVVVVVVVVVV'.format(s))
    res = pat.sub(repl, s)
    print(res)

Выход:

----------------------------------
NSLocalizedString(@"Example Text", @"Example Comment");
VVVVVVVVVVVVVVVVVVVV
NSLocalizedStringWithDefaultValue(@"elementID", nil, [NSBundle mainBundle], @"Example Text", @"Example Comment");
----------------------------------
NSLocalizedString(@"Example, text", nil)
VVVVVVVVVVVVVVVVVVVV
NSLocalizedStringWithDefaultValue(@"elementID", nil, [NSBundle mainBundle], @"Example, text", nil)
----------------------------------
NSLocalizedString(@"Example text", @"Example (with paranthesis) comment")
VVVVVVVVVVVVVVVVVVVV
NSLocalizedStringWithDefaultValue(@"elementID", nil, [NSBundle mainBundle], @"Example text", @"Example (with paranthesis) comment")
----------------------------------
NSLocalizedString(test, nil)
VVVVVVVVVVVVVVVVVVVV
NSLocalizedStringWithDefaultValue(@"elementID", nil, [NSBundle mainBundle], test, nil)
----------------------------------
NSLocalizedString(test, @"Example comment")
VVVVVVVVVVVVVVVVVVVV
NSLocalizedStringWithDefaultValue(@"elementID", nil, [NSBundle mainBundle], test, @"Example comment")
----------------------------------
NSLocalizedString(@"Error", nil) NSLocalizedString(@"Change settings", @"Option to change HTTP Post settings") NSLocalizedString(@"Cancel", nil)
VVVVVVVVVVVVVVVVVVVV
NSLocalizedStringWithDefaultValue(@"elementID", nil, [NSBundle mainBundle], @"Error", nil) NSLocalizedStringWithDefaultValue(@"elementID", nil, [NSBundle mainBundle], @"Change settings", @"Option to change HTTP Post settings") NSLocalizedStringWithDefaultValue(@"elementID", nil, [NSBundle mainBundle], @"Cancel", nil)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...