无论如何要在空格处分隔但避免在文件路径处分隔?
Anyway to separate at whitespaces but avoid separating at file paths?
我正在尝试使用 regex
:
将此字符串分隔成一个列表
-y -hwaccel cuda -threads 8 -loglevel error -hide_banner -stats -i - -c:v hevc_nvenc -rc constqp -preset p7 -qp 18 C:\Users\User\Documents\Python\Smoothie\test 124\Resampled_vid.mp4
我是用下面的方法来分离的:
split(r'(?!\)'+'\s+',f"{Settings[1]}".format(Input=InFile,Output=OutFile))
Output:
['-y', '-hwaccel', 'cuda', '-threads', '8', '-loglevel', 'error', '-hide_banner', '-stats', '-i', '-', '-c:v', 'hevc_nvenc', '-rc', 'constqp', '-preset', 'p7', '-qp', '18', 'C:\Users\User\Documents\Python\Smoothie\test', '124\Resampled_vid.mp4']
期望的输出:
['-y', '-hwaccel', 'cuda', '-threads', '8', '-loglevel', 'error', '-hide_banner', '-stats', '-i', '-', '-c:v', 'hevc_nvenc', '-rc', 'constqp', '-preset', 'p7', '-qp', '18', 'C:\Users\User\Documents\Python\Smoothie\test 124\Resampled_vid.mp4']
有没有办法,我可以完全避免在文件路径处拆分?
我会在这里使用 re.findall
方法:
inp = "-y -hwaccel cuda -threads 8 -loglevel error -hide_banner -stats -i - -c:v hevc_nvenc -rc constqp -preset p7 -qp 18 C:\Users\User\Documents\Python\Smoothie\test 124\Resampled_vid.mp4"
parts = re.findall(r'[A-Z]+:(?:\[^\]+)+\.\w+|\S+', inp)
print(parts)
['-y', '-hwaccel', 'cuda', '-threads', '8', '-loglevel', 'error', '-hide_banner',
'-stats', '-i', '-', '-c:v', 'hevc_nvenc', '-rc', 'constqp', '-preset', 'p7',
'-qp', '18',
'C:\Users\User\Documents\Python\Smoothie\test 124\Resampled_vid.mp4']
此处使用的正则表达式模式表示匹配,或者:
[A-Z]+:(?:\[^\]+)+\.\w+ a file path
| OR
\S+ any group of non whitespace characters
这里的技巧是首先急切地尝试匹配文件路径。只有失败,我们才会尝试一次匹配一个 word/term。
我正在尝试使用 regex
:
-y -hwaccel cuda -threads 8 -loglevel error -hide_banner -stats -i - -c:v hevc_nvenc -rc constqp -preset p7 -qp 18 C:\Users\User\Documents\Python\Smoothie\test 124\Resampled_vid.mp4
我是用下面的方法来分离的:
split(r'(?!\)'+'\s+',f"{Settings[1]}".format(Input=InFile,Output=OutFile))
Output:
['-y', '-hwaccel', 'cuda', '-threads', '8', '-loglevel', 'error', '-hide_banner', '-stats', '-i', '-', '-c:v', 'hevc_nvenc', '-rc', 'constqp', '-preset', 'p7', '-qp', '18', 'C:\Users\User\Documents\Python\Smoothie\test', '124\Resampled_vid.mp4']
期望的输出:
['-y', '-hwaccel', 'cuda', '-threads', '8', '-loglevel', 'error', '-hide_banner', '-stats', '-i', '-', '-c:v', 'hevc_nvenc', '-rc', 'constqp', '-preset', 'p7', '-qp', '18', 'C:\Users\User\Documents\Python\Smoothie\test 124\Resampled_vid.mp4']
有没有办法,我可以完全避免在文件路径处拆分?
我会在这里使用 re.findall
方法:
inp = "-y -hwaccel cuda -threads 8 -loglevel error -hide_banner -stats -i - -c:v hevc_nvenc -rc constqp -preset p7 -qp 18 C:\Users\User\Documents\Python\Smoothie\test 124\Resampled_vid.mp4"
parts = re.findall(r'[A-Z]+:(?:\[^\]+)+\.\w+|\S+', inp)
print(parts)
['-y', '-hwaccel', 'cuda', '-threads', '8', '-loglevel', 'error', '-hide_banner',
'-stats', '-i', '-', '-c:v', 'hevc_nvenc', '-rc', 'constqp', '-preset', 'p7',
'-qp', '18',
'C:\Users\User\Documents\Python\Smoothie\test 124\Resampled_vid.mp4']
此处使用的正则表达式模式表示匹配,或者:
[A-Z]+:(?:\[^\]+)+\.\w+ a file path
| OR
\S+ any group of non whitespace characters
这里的技巧是首先急切地尝试匹配文件路径。只有失败,我们才会尝试一次匹配一个 word/term。