使用“.gsub!”在数组中迭代时出现多个通配符问题
Issue with multiple wildcard symbols when iterating in array with `.gsub!`
我想弄清楚如何使用多个通配符(或者其他一些方法,如果有人知道的话)来替换字符串数组中的多个字符。数组中的每个元素都是一个电话号码和日期,(例如. 8675309,2015-01-20).我试图仅删除逗号和日期,以便数组中的每个元素仅是电话号码
当遍历数组中的每个元素时,我通过调用 .gsub!
在每个元素替换单个字符时获得预期结果。
file_data = ["8675309,2015-01-20"]
puts file_data[0] #=> 8675309,2015-01-20
file_data.each do |s|
s.gsub!(/0/, "X")
end
puts file_data[0] #> 86753X9,2X15-X1-2X
为了消除逗号和日期,我尝试简单地使用通配符,调用 s.gsub!(",****/**/**", "")
。然后,这显示出意想不到的结果:
file_data = ["8675309,2015-01-20"]
file_data.each do |s|
s.gsub!(/,****-**-**/, "")
end
puts file_data[0] #> 8675309,2015-01-20
我也尝试了其他线程中建议的其他几个通配符('.'和'^'),但结果没有改变。
我不知道如何消除每个元素中的逗号和日期,同时保持主数字不变。我认为 .gsub!
是正确的方法,但我也对任何替代方法持开放态度。感谢任何帮助。
您处理通配符的方式太过分了。当你知道你想要子时为什么要使用通配符?删除逗号和日期(只要日期总是相同的格式)应该很简单:
name = "8675309,2015-01-20"
name.gsub!(/,\d{4}-\d{2}-\d{2}/,"")
乍一看,我可能会用String#split
得到phone号:
file_data = ["8675309,2015-01-20"]
phone_numbers = file_data.map {|s| s.split(',').first }
phone_numbers[0] #=> "8675309"
或者,如果 phone 数字始终为 7 个字符,我可能会得到一个字符串子集 []
:
file_data.map {|s| s[0,7] }
或者,如果您真的想坚持使用正则表达式:
file_data.each do |s|
s.gsub!(/,.*\z/, '')
end
读作:从第一个逗号到字符串末尾的字符串的一部分,不替换任何内容。
使用String#partition
name.partition(',')[0]
=>"8675309"
我想弄清楚如何使用多个通配符(或者其他一些方法,如果有人知道的话)来替换字符串数组中的多个字符。数组中的每个元素都是一个电话号码和日期,(例如. 8675309,2015-01-20).我试图仅删除逗号和日期,以便数组中的每个元素仅是电话号码
当遍历数组中的每个元素时,我通过调用 .gsub!
在每个元素替换单个字符时获得预期结果。
file_data = ["8675309,2015-01-20"]
puts file_data[0] #=> 8675309,2015-01-20
file_data.each do |s|
s.gsub!(/0/, "X")
end
puts file_data[0] #> 86753X9,2X15-X1-2X
为了消除逗号和日期,我尝试简单地使用通配符,调用 s.gsub!(",****/**/**", "")
。然后,这显示出意想不到的结果:
file_data = ["8675309,2015-01-20"]
file_data.each do |s|
s.gsub!(/,****-**-**/, "")
end
puts file_data[0] #> 8675309,2015-01-20
我也尝试了其他线程中建议的其他几个通配符('.'和'^'),但结果没有改变。
我不知道如何消除每个元素中的逗号和日期,同时保持主数字不变。我认为 .gsub!
是正确的方法,但我也对任何替代方法持开放态度。感谢任何帮助。
您处理通配符的方式太过分了。当你知道你想要子时为什么要使用通配符?删除逗号和日期(只要日期总是相同的格式)应该很简单:
name = "8675309,2015-01-20"
name.gsub!(/,\d{4}-\d{2}-\d{2}/,"")
乍一看,我可能会用String#split
得到phone号:
file_data = ["8675309,2015-01-20"]
phone_numbers = file_data.map {|s| s.split(',').first }
phone_numbers[0] #=> "8675309"
或者,如果 phone 数字始终为 7 个字符,我可能会得到一个字符串子集 []
:
file_data.map {|s| s[0,7] }
或者,如果您真的想坚持使用正则表达式:
file_data.each do |s|
s.gsub!(/,.*\z/, '')
end
读作:从第一个逗号到字符串末尾的字符串的一部分,不替换任何内容。
使用String#partition
name.partition(',')[0]
=>"8675309"