Что делает регулярное выражение в этом скрипте re.search ()? - PullRequest
0 голосов
/ 23 сентября 2019

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

# Absolute path of the script:
ROOT_DIR = os.path.dirname(os.path.abspath(__file__))

# Real path of the script:
REAL_DIR = re.search(r'(?<=\[)(.*?)(?=\])', 
                     subprocess.check_output('dir {} /al | findstr "<JUNCTION>" | findstr Ducati'.format(ROOT_DIR.replace("Ducati", "")), stderr=subprocess.STDOUT, shell=True).decode('ASCII')).group()

# Absolute path of the sandbox
SANDBOX_DIR = os.path.abspath(os.path.join(REAL_DIR, '..', '..'))

# Simple FlashTool Path
FLASHTOOL_DIR = os.path.abspath(
    os.path.join(SANDBOX_DIR, 'DevelopmentEnvironmentPlatformTools', 'Tool.UDSFlashtool',
                'build', 'INSTALL', 'flashtool', 'bin', 'simple-flashtool.exe'))

# Network config file
CONF_DIR_PATH = os.path.abspath(os.path.join(FLASHTOOL_DIR, '..', '..', 'conf'))

# Log file path
LOG_ROOT_PATH = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(ROOT_DIR))), 'tta_logs', 'FlashTool')

Особенно эта часть

# Real path of the script:
REAL_DIR = re.search(r'(?<=\[)(.*?)(?=\])', 
                     subprocess.check_output('dir {} /al | findstr "<JUNCTION>" | findstr Ducati'.format(ROOT_DIR.replace("Ducati", "")), stderr=subprocess.STDOUT, shell=True).decode('ASCII')).group()

1 Ответ

1 голос
/ 24 сентября 2019

Если вы спрашиваете конкретно, что делает регулярное выражение re.search(r'(?<=\[)(.*?)(?=\])', он находит строки, которые заключены в квадратные скобки, и захватывает содержимое внутри фигурных скобок.

  • (?<=\[) является положительным взглядом сзади, утверждая, что перед этим совпадением есть квадратная открывающая скобка [
  • (.*?) - это группа захвата, которая выбирает любые символы на любое числораз, но квантификатор ? означает, что он захватывает как можно меньше.Это означает, что обычно он не захватывает закрывающие квадратные скобки перед ним;если у вас есть a[s]df[ghj]kl, он захватит s и ghj вместо s]df[ghj.
  • (?=\]) - это позитивный прогноз, утверждающий, что после этого матча происходит закрытие квадратаскобка ]

Смотрите это в действии здесь!

Я могу отчасти догадаться в остальной части сценария, который выглядит так, как будто он ищет символическиессылки («ярлыки») на что-то.Наличие dir {} /al заставляет меня думать, что этот скрипт должен быть запущен в Windows.subprocess.check_output() собирается запустить командную строку внутри нее, а затем направить свой (возможно, многострочный) вывод в регулярное выражение, которое затем будет использовать .group() для создания кортежа найденных совпадений.

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