这个脚本中的re.search()正则表达式是做什么的?

2024-10-01 09:19:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望有人能帮我这个代码,我期待着使用它。你知道吗

# 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()

Tags: ofthepathosdirscriptrootreal
1条回答
网友
1楼 · 发布于 2024-10-01 09:19:12

如果您特别询问regex re.search(r'(?<=\[)(.*?)(?=\])'做什么,它会查找被方括号包围的字符串并捕获括号内的内容。你知道吗

  • (?<=\[)是一个肯定的lookback,断言在这个匹配之前,有一个方括号[
  • (.*?)是一个捕获组,它可以多次选择任何字符,但是?量词意味着它捕获的字符尽可能少。这意味着它通常不会捕获前面的结束方括号;如果您有a[s]df[ghj]kl,它将捕获sghj,而不是s]df[ghj。你知道吗
  • (?=\])是一个积极的前瞻,断言在这个匹配之后,有一个正方形的右大括号]

See it in action here!

我可以猜测脚本的其余部分,它看起来像是在搜索指向某个东西的符号链接(“快捷方式”)。dir {} /al的出现让我觉得这个脚本应该在Windows上运行。subprocess.check_output()将在其内部运行命令字符串,然后将其(可能是多行)输出通过管道传输到regex,然后regex将使用.group()创建它找到的匹配项的元组。你知道吗

相关问题 更多 >