如何找到最后一个A,其余字符串包含RegEx中的第一个B?

时间:2016-03-23 16:31:13

标签: regex pcre

我有大量要重命名的文件,其名称包含混乱后缀。我正在使用一些高级重命名软件,并想知道如何编写一个删除后缀的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是否可以这样做。

不确定的破折号数量(有或没有空格)是修复后的拆分器,但内容或后期修复都可能包含破折号和/或修复,但是,所有后期修复都包含内部的某些字母(例如本例中的字母OpOst

有一些观点:

  1. 内容和后缀之间的拆分器只是短划线,如果只有空格,则不是拆分器。
  2. 破折号和空格可能包含在内容和后缀中,因此我不能简单地将第一个/最后一个破折号作为分割符搜索 - 它是最后一个破折号,包括前导空格(在第一次出现特定字母之前)( s)被找到(见最后一个例子)。
  3. 我想找到一种编写单个RegEx表达式的方法,而不是逐步删除后缀。
  4. 整个文件名可能包含非ASCII字符,尤其是certain letter(s)。所以使用像[a-zA-Z]这样的东西并不理想。
  5. PS:我也想知道如何包括A而不是B的角色类?

    例如,我想要所有字母数字,但排除字母a和数字5,类似(显然不起作用):/[\w^a5]+/。除了编写像/[b-zA-Z0-46-9]/之类的详尽列表外,还有更好的方法吗?像工会和十字路口一样?

    我真诚地感谢任何帮助。非常感谢。

1 个答案:

答案 0 :(得分:1)

您应该可以替换

\s*-+\s*[^O-]*O.*$

用空字符串。它将匹配一个或多个破折号(由可选空格包围),然后在输入结束前至少有一个O

如果您想匹配整个词组,则需要使用negative lookahead,如下所示:

\s*-+\s*((?!pOst)[^-])*pOst.*$