2017-08-29 94 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