2015-04-19 177 views
-4

我想建立一個RegEx表達式來替換字符串的前綴和後綴。一般的字符串是從RegEx替換前綴和後綴

  1. 已知前綴字符串
  2. 一些字母a-z或A-Z
  3. 一些未知的串字母,連字符,反斜槓,斜線和數字建成。
  4. 連字符
  5. 整數
  6. 符號#。
  7. 字母一些字符串

例子:

KnownStringr/df-2e\d-3724#.Gkjsu 
KnownStringEd\e4v-bn-824#.YKfg 
KnownStringa-YK224E\yy-379924#.awws 

我想更換號碼的前綴和後綴,這樣我得到:

MyPrefix3724MyPostfix 
MyPrefix824MyPostfix 
MyPrefix379924MyPostfix 
+4

我投票結束這個問題作爲題外話,因爲它要求一個現成的解決方案,並顯示沒有最小的努力。 – Maroun

+0

所以基本上,你需要得到#號前的最後一個整數,我是否正確?你試過什麼了?你使用什麼語言? –

+0

我曾嘗試使用在線工具(如http://www.regexr.com/),但對於初學者來說這太複雜了。我需要在#之前的最後一個整數,但只有在KnownString之後。另外,我需要用包含該整數的新序列替換整個序列。我必須在同一個正則表達式中這樣做。我甚至不知道這是否可能 – Don

回答

0

此正則表達式應該做的技巧,但你總是應該指定你使用的語言/框架,因爲並非所有的正則表達式引擎都支持相同的功能。

說明 要捕捉將成爲捕獲組#3((\d+))的數量,其中大多數語言引用作爲\ 3

(?:KnownString)([a-zA-Z])(.*?)-(\d+)\#\.[a-zA-Z]+ 

(?:      # Opens NCG 
    KnownString   # Literal KnownString 
)      # Closes NCG 
(      # Opens CG1 
    [a-zA-Z]   # Character class (any of the characters within) 
          # Anything between a and z 
          # Anything between A and Z 
)      # Closes CG1 
(      # Opens CG2 
    .*?     # . denotes any single character, except for newline 
          # * repeats zero or more times 
          # ? as few times as possible 
)-      # Closes CG2 
          # Literal - 
(      # Opens CG3 
    \d+     # Token: \d (digit) 
          # + repeats one or more times 
)      # Closes CG3 
\#      # Literal # 
\.      # Literal . 
[a-zA-Z]+    # Character class (any of the characters within) 
          # Anything between a and z 
          # Anything between A and Z 
          # + repeats one or more times 

您還沒有指定已知的前綴是什麼,您應該小心地使用已知字符串(特別是句點,加號,星號,問號和括號)來轉義特殊字符。