Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 在执行正则表达式拆分后,如何保留第一个字符?_Ruby_Regex_String_Split - Fatal编程技术网

Ruby 在执行正则表达式拆分后,如何保留第一个字符?

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 } => [

我使用的是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 } 
 => ["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"]]