2017-08-29 140 views
1

鉴于串寻找正则表达式前后数

匹配

170905-CBM-238.pdf

我想匹配170905-CBM.pdf,这样我可以替换/删除它们并留下238

我已经搜索并找到可以工作但不能将它们放在一起的作品。
这个 - >(.*-)将匹配第一部分和
这个 - >(.[^/.]+$)将用最后一节

但我无法弄清楚如何将它们结合在一起,使其符合之前的一切,包括第二个短线以及之后的所有内容,包括期间(或延期),但不匹配之间的数字。

帮助:)并感谢您的关心。

+1

尝试['^ * - ([0-9] +)\ [^] + $'。](https://开头regex101.com/r/5d3pfL/1)。 –

+0

似乎匹配的一切 - 我需要它不匹配的数字(和扩展可能不总是PDF)--cheers – jlisham

+2

如果你只是想提取'238',为什么要匹配其他什么?只要做' - (\ d +)\。pdf $'。 – melpomene

回答

1

有几个选项来实现你Nintex需要什么。

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

查看regex demo

详细

  • (?<=^.*-) - 积极的回顾后,需要立即到当前位置的左侧,字符串(^)的开始,那么任何0+字符比LF其他尽可能多的了到的-最后一次出现和随后的子模式
  • \d+ - 1或多个数字
  • (?=\.[^.]*$) - 正先行要求,立即至t的右他当前的位置,存在.以及.以外的0+字符,直到字符串的末尾。

如果使用替换文本操作,使用

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

another regex demo(在上下文标签显示的结果替代)。

详细

  • ^ - 字符串锚开始
  • .* - 比LF其他到随后的子模式的最后出现的任何字符0+ ...
  • - - 一个连字符
  • ([0-9]+) - 第1组:一个或多个ASCII数字
  • \. - 串的端 - 字面.
  • [^.]+ - 比.
  • $其它1个或多个字符。

替换$1参照存储在组的值为1

+1

真棒!这两种方法的工作,真正欣赏增加的细节! – jlisham

+0

仅供参考:我选择替换,因为它产生一个简单的变量,而提取需要一个集合变量 – jlisham

0

我不知道ninetex正则表达式,但sed类型的正则表达式:

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

在Perl同一作品:

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

显然nintex使用.NET正则表达式,即基本上Perl的味道。 – melpomene

+0

应该工作相同,然后... – dawg

+0

在Perl中,你应该在替换部分使用'$ 1'。也许'$ 1'也可以在.NET替换字符串中工作(它在JavaScript中)。 – melpomene