Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex移除驱动器号&;用空格替换前斜杠_Regex_Perl - Fatal编程技术网

Regex移除驱动器号&;用空格替换前斜杠

Regex移除驱动器号&;用空格替换前斜杠,regex,perl,Regex,Perl,我正在尝试编写一个Perl正则表达式替换模式,它执行以下操作: 输入:C:/images/sample文件夹/any_子文件夹01/ 输出:images示例文件夹any_子文件夹01 因此,它应该修剪驱动器号,并将任何正斜杠替换为空白。 路径可以包含在Windows路径中有效的任何字符 可能这是一个非常简单的模式,但我不太擅长正则表达式。。 需要使用Perl正则表达式才能在ExifTool中使用-如需任何帮助,将不胜感激删除驱动器号: 转换/到空间: 是否要切断前导“/”?将此正则表达式用作第一

我正在尝试编写一个Perl正则表达式替换模式,它执行以下操作:

输入:
C:/images/sample文件夹/any_子文件夹01/

输出:
images示例文件夹any_子文件夹01

因此,它应该修剪驱动器号,并将任何正斜杠替换为空白。 路径可以包含在Windows路径中有效的任何字符

可能这是一个非常简单的模式,但我不太擅长正则表达式。。 需要使用Perl正则表达式才能在ExifTool中使用-如需任何帮助,将不胜感激

删除驱动器号: 转换/到空间: 是否要切断前导“/”?将此正则表达式用作第一个正则表达式:

s/^\w\:\///;

从RegexPlanet粘贴:

正则表达式:
(C:)?\/

选项:
g

Perl正则表达式对象:
qr/(C:)?\/

Perl变量:
(C:)?\/


现在,您所要做的就是修剪前导和尾随的空白。

您可以使用模块Parse::Path来解析文件路径和名称:

use v5.10;
use Parse::Path;

my $path = Parse::Path->new(
   path  => 'C:\WINDOWS\SYSTEM32',
   style => 'File::Win32',
);

say $path->as_string;
$path->push($path, 'DRIVERS');
say $path->as_string;

$path->volume('D');
say $path->as_string;

my $volume = $path->volume;
$path->volume('Z');
$path->volume('');  # removes the volume

这将处理所有卷(
\\foo\bar
),而不仅仅是驱动器(
c:\
)。

谢谢!有没有办法将这两个替换运算符合并到一个正则表达式中?@Gino,没有,没有办法将替换运算符合并到一个正则表达式中……如果两个替换运算符都被替换为同一个对象,你可以将这两个替换运算符合并到一个正则表达式中。你应该公布你试图帮助人们解决问题的内容。不过看起来不错,我想这不是一个选项。需要正则表达式作为ExifTool的输入,以便将路径作为单独的字插入某些图像的IPTC标题中。exiftool”-iptc:标题摘要
s/^\w\:\///;
use v5.10;
use Parse::Path;

my $path = Parse::Path->new(
   path  => 'C:\WINDOWS\SYSTEM32',
   style => 'File::Win32',
);

say $path->as_string;
$path->push($path, 'DRIVERS');
say $path->as_string;

$path->volume('D');
say $path->as_string;

my $volume = $path->volume;
$path->volume('Z');
$path->volume('');  # removes the volume
use Path::Class qw( file );

my @components = file($path)->components();
shift(@components);
my $display = join(' ', @components);