Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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_Ant - Fatal编程技术网

Regex 正则表达式重命名

Regex 正则表达式重命名,regex,ant,Regex,Ant,我正在编写一个Ant脚本,将一个目录的内容移动到另一个目录。除了移动文件,我还必须重命名文件 有些文件的结构名称为1_ab_cd.properties,有些文件的结构名称为2_ab.properties。我基本上要做的是从开始到结束删除所有内容,并用属性替换它 因此,文件的名称必须与name1.properties和name2.properties类似。目前,我的实施情况如下: <mapper type="regexp" from="(.*)_.*_.*(.*)" to="\1.prope

我正在编写一个Ant脚本,将一个目录的内容移动到另一个目录。除了移动文件,我还必须重命名文件

有些文件的结构名称为1_ab_cd.properties,有些文件的结构名称为2_ab.properties。我基本上要做的是从开始到结束删除所有内容,并用属性替换它

因此,文件的名称必须与name1.properties和name2.properties类似。目前,我的实施情况如下:

<mapper type="regexp" from="(.*)_.*_.*(.*)" to="\1.properties\2" />

这适用于有两个u的文件,但不适用于有一个u的文件。name1_ab_cd.properties将重命名为name1.properties,但是name2_ab.properties将保持原样。如果我这样说:

<mapper type="regexp" from="(.*)_.*(.*)" to="\1.properties\2" />

然后,只有name2_ab.properties将重命名为name2.properties,但是name1_ab_cd.properties将保持原样

我需要一种方法来选择第一个,然后选择直到字符串结束。我该怎么做呢

谢谢

试试这个:

<mapper type="regexp" from="([^_.]+)[^.]*(\.properties)" to="\1\2" />


正则表达式是贪婪的。也就是说,他们将匹配最大可能的匹配。想象这样一个字符串:

this_is_a_test
我想让第一部分的第一个下划线:

this_is_a_test =~ s/^(.*)_/$1/
括号集不仅匹配
这个
,而且匹配
这个是测试
,因为这是最大的匹配。这是因为我告诉它要将所有内容匹配到下划线

解决类似问题的基本方法是排除我不想要的角色。例如:

this_is_a_test =~ s/^([^_]*)_/$1/
将匹配任何字符系列的
*
替换为匹配除下划线以外的任何字符系列的[^.]*。这样,您只匹配到第一个下划线

事实上,我们可以在分组后删除下划线:

this_is_a_test =~ s/^([^_]*)/$1/
因此,您只需将映射器从以下位置更改为:

<mapper type="regexp" from="(.*)_.*(.*)" to="\1.properties\2" />


^([^]*)
将匹配从行首到第一个下划线的所有内容。
\.properties$
将确保文件名以
.properties
结尾


我不确定你的第二组在做什么。(您是否正在尝试将字符串的一部分移动到
.properties
后缀之后?)相反,我只是按照您在初始查询中所述进行了操作。

太好了!非常感谢你的帮助,非常感谢。
<mapper type="regexp" from="^([^_]*).*\.properties$" to="\1.properties"/>