【发布时间】:2016-03-23 16:31:12
【问题描述】:
我有大量的文件要重命名,这些文件的名称包含混沌后缀。我正在使用一些高级重命名软件,想知道如何编写一个 RegEx 来删除后缀。一些例子是:
Content - Still content-A pOst fix
Content-- BpOst - fix with - inside (dashes in postfix)
Content-Still --Content -CpOstfix (dashes in content)
Content fake pOst - real pOst --fix (two keywords, one in content and postfix each)
Content fake- pOst - real pOst --fix (two keywords both in postfix)
Content fake pOst fix (space is not a splitter of pOstfix, so nothing removed)
我希望输出删除所有后期修复,包括前导破折号和/或空格。所需的输出是:
Content - Still content
Content
Content-Still --Content
Content fake pOst
Content fake
Content fake pOst fix (space is not a splitter of pOstfix, so nothing removed)
我什至不知道 RegEx 是否可以做到这一点。
不确定数量的破折号(带或不带空格)是后缀的分隔符,但内容或后缀都可能包含破折号和/或修复,但也就是说,所有后缀都包含特定的字母(例如在本例中为 O 或 pOst)。
有几点:
- 内容和后缀之间的分隔符只有破折号,如果只有空格,则不是分隔符。
- 短划线和空格可能同时包含在内容和后缀中,因此我不能简单地搜索第一个/最后一个破折号作为分隔符 - 它是第一次出现特定字母之前的最后一个破折号,包括前导空格( s) 已找到(参见最后一个示例)。
- 我想找到一种编写单个 RegEx 表达式的方法,而不是逐渐删除后缀。
- 整个文件名可能包含非 ASCII 字符,尤其是
certain letter(s)。所以使用[a-zA-Z]之类的东西并不理想。
PS:我也想知道如何为包含A但不包含B的字符类?
例如,我想要所有字母数字,但不包括字母 a 和数字 5,类似于(显然不起作用):/[\w^a5]+/。除了像/[b-zA-Z0-46-9]/ 这样写一个详尽的列表,还有什么更好的方法吗?比如联合和交叉点?
我真诚地感谢任何帮助。非常感谢。
【问题讨论】:
-
一个正则表达式本身只匹配(部分)字符串。这个“高级重命名软件”究竟有什么能力,它能够用其他内容替换正则表达式匹配吗?它允许捕获组吗?它使用什么正则表达式实现?链接(文档)或至少命名软件会有所帮助。
-
@Bergi 谢谢。我在 PC 上使用 Advanced Renamer,在 Mac 上使用 A Better Finder Rename。你说的捕获组是什么意思? RegEx 的实施是什么意思?有任何不同的正则表达式吗?抱歉,我正在学习 RegEx,所以了解不多,我宁愿找不到任务的替代品,因为我也在努力提高我在 RegEx 中的技能。再次感谢。
-
你读过advancedrenamer.com/user_guide/regular_expresions?如果没有,你真的应该这样做。它还包含我正在寻找的信息。