2017-09-16 162 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