file_regex ломает возвышенную сборку

Это регулярное выражение работает в поле поиска SublimeText:

([^\/]+\.java)

Если я использую это регулярное выражение в .sublime-build файл:

  • \. выделено красным, и
  • система сборки не распознается.

Когда я закомментирую строку "file_regex": "([^\/]+\.java)" система сборки признана.

{
  "cmd": ["gradle" , "build"],
  "working_dir": "${project_path}",
  "file_regex": "([^\/]+\.java)"
}

Вопрос: почему регулярное выражение, которое работает в поиске, не работает в .sublime-build файл?

1 ответ

Решение

.sublime-build Файл использует формат файла JSON.

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

Как это:

"file_regex": "([^\/]+\\.java)"

Поскольку система сборки будет использоваться в Python, лежащем в основе Sublime Text, давайте убедимся, что Python будет читать это так, как мы ожидаем.

Тестовый код Python:

import re

builddict = {
  "cmd": ["gradle" , "build"],
  "working_dir": "${project_path}",
  "file_regex": "([^\/]+\\.java)"
}

re_pattern = builddict['file_regex']
prog = re.compile(re_pattern)

teststrings = ['aaa.java', 'aaajava']

for teststring in teststrings:
    result = prog.search(teststring)

    if result is None:
        print(teststring + ' no match')
    else:
        print(teststring + ' matched')

Выход:

aaa.java matched
aaajava no match

Я предполагаю, что соответствует вашему желаемому результату?

Другие вопросы по тегам