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