在数字之前和之后寻找匹配的正则表达式

时间:2017-08-29 21:17:25

标签: regex nintex-workflow

给出字符串

  

170905-CBM-238.pdf

我尝试匹配170905-CBM.pdf,以便我可以替换/删除它们并留下238

我已经搜索过并找到了有效的作品,但却无法将它们放在一起 这 - > (.*-)将匹配第一部分和 这 - > (.[^/.]+$)将匹配最后一部分

但是我无法弄清楚如何将它们绑在一起,以便它匹配之前的所有内容,包括第二个破折号以及之后的所有内容,包括句点(或扩展名),但与之间的数字不匹配。

帮助:)并感谢您的善意考虑。

2 个答案:

答案 0 :(得分:1)

有几种选择可以在Nintex中实现您的需求。

如果您使用提取操作,请使用(?<=^.*-)\d+(?=\.[^.]*$)作为模式

请参阅regex demo

<强>详情

  • (?<=^.*-) - 一个正向的后视镜,需要在当前位置的左侧立即开始字符串(^),然后尽可能多地使用除LF以外的任何0+字符。最后一次出现-以及后续的子模式
  • \d+ - 一位或多位
  • (?=\.[^.]*$) - 一个积极的前瞻,要求在当前位置的右侧,除.以外的.和0+字符的存在,直到字符串的末尾

如果您使用替换文字操作,请使用

模式^.*-([0-9]+)\.[^.]+$
替换文字$1

请参阅another regex demo上下文标签显示替换结果)。

<强>详情

  • ^ - 字符串锚点的开头
  • .* - 除了LF以外的任何0 +字符,直到最后一次出现的后续子模式......
  • - - 连字符
  • ([0-9]+) - 第1组:一个或多个ASCII数字
  • \. - 文字.
  • [^.]+ - 除.
  • 以外的1个或多个字符
  • $ - 字符串结束。

替换$1引用存储在第1组中的值。

答案 1 :(得分:0)

我不知道ninetex正则表达式,但是$ echo "170905-CBM-238.pdf" | sed -E 's/^.*-([0-9]*)\.[^.]*$/\1/' 238 类型的正则表达式:

$ echo "170905-CBM-238.pdf" | perl -pe 's/^.*-([0-9]*)\.[^.]*$/$1/'
238

在Perl中也是如此:

{{1}}