2017-09-16 166 views
2

進出口試圖GSUB使用一組10替換字符串但是,代替於此紅寶石由組1代替和0 我在GSUB替換使用此我如何才能正則表達式紅寶石替換組10使用gsub?

gsub \\10xp 
    "smnm nmnmn nmnmn dsdsf sffddf sffdfd dfsff fdsdsfd fsdds ssfsff".gsub(/(\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+)/,"\\10xp") 

用於更換,並獲得第1組和字符串「0xp 「

我怎麼能解決這個

請幫我

回答

2

不知道如何引用一個兩位數的捕獲組,但你可以永遠只是參考名稱與somethi吳象:

"smnm nmnmn nmnmn dsdsf sffddf sffdfd dfsff fdsdsfd fsdds ssfsff". 
    gsub(/(\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (?<ten>\S+)/, 
     '\k<ten>xp') 
# "ssfsffxp" 
+1

這是在Ruby中的唯一途徑。 [其他正則表達式引擎有處理這些情況的手段](http://www.rexegg.com/regex-capture.html)。 –

2

沒有人知道正則表達式引擎不支持超出[0..9]區無名組。使用named_captures替代,或者用未被捕獲組(?:...),或使用正則表達式聰明:

"smnm nmnmn nmnmn dsdsf sffddf sffdfd dfsff fdsdsfd fsdds ssfsff". 
    gsub(/((?:\S+\s+){9})(\S+)/, "\\1 \\2xp") 

#      ⇑ second group 
#     ⇑⇑⇑ nine times 
#  ⇑⇑⇑ don’t capture this! 
#  ⇑ first group