Ruby 在执行正则表达式拆分后,如何保留第一个字符?
我使用的是Rails 5。我试图在正则表达式上拆分,但它似乎在拆分后切断了项目的第一个字符。我有Ruby 在执行正则表达式拆分后,如何保留第一个字符?,ruby,regex,string,split,Ruby,Regex,String,Split,我使用的是Rails 5。我试图在正则表达式上拆分,但它似乎在拆分后切断了项目的第一个字符。我有 2.4.0 :044 > tokens = ["12.BILL R. PRESTON"] => ["12.BILL R. PRESTON"] 2.4.0 :045 > tokens = tokens.flat_map { |token| token =~ /\d\.[a-z]/i ? token.split(/\d\.[a-z]/i) : token } => [
2.4.0 :044 > tokens = ["12.BILL R. PRESTON"]
=> ["12.BILL R. PRESTON"]
2.4.0 :045 > tokens = tokens.flat_map { |token| token =~ /\d\.[a-z]/i ? token.split(/\d\.[a-z]/i) : token }
=> ["1", "ILL R. PRESTON"]
我希望结果会很好
["1", "BILL R. PRESTON"]
但是“B”正在被删除。如何调整拆分表达式?使用a(?=[a-z])
,以便在拆分中不使用B
:
tokens.flat_map { |token| token =~ /\d\.[a-z]/i ? token.split(/\d\.(?=[a-z])/i) : token }
=> ["1", "BILL R. PRESTON"]
如果你想同时保留2
和B
,你可以添加一个lookback(?tokens=[“12.BILL R.PRESTON”,“238.BETTY Z.BOOP”]
tokens.map{s|s.split(/(?[“1”,“BILL R.PRESTON”],[“2”,“BETTY Z.BOOP”])
如果要拆分所有数字,请删除“\d+”:
tokens.map{s|s.split(/(?[“12”,“BILL R.PRESTON”],[“238”,“BETTY Z.BOOP”])
你想要的是“1”
,而不是“12”
?我已经接受了答案,没有意识到我的号码也被切断了,所以你的替代解决方案确实帮了我的忙。
tokens.flat_map { |token| token =~ /\d\.[a-z]/i ? token.split(/(?<=\d)\.(?=[a-z])/i) : token }
=> ["12", "BILL R. PRESTON"]
tokens = ["12.BILL R. PRESTON", "238.BETTY Z. BOOP"]
tokens.map { |s| s.split(/(?<=\d)\d+\./) }
#=> [["1", "BILL R. PRESTON"], ["2", "BETTY Z. BOOP"]]
If you want all the digits split off, remove `\d+`:
tokens.map { |s| s.split(/(?<=\d)\./) }
#=> [["12", "BILL R. PRESTON"], ["238", "BETTY Z. BOOP"]]