ruby - 根据每个单词的起始字母替换字符串中的单词

标签 ruby

我有一个简单的 Ruby 脚本,它从文件中逐行读取数据,这是数据示例;

"SW02 CAR03 B0932 B23(B) B32(A) V1000 V0020"
"T001 T665 CAR99A B0932 S222 LA44 V1009 V0029"

我试图找到一种方法来根据每个单词的第一个字母来匹配和替换整个单词。例如。 'Sxxxxxx' 应替换为单词 'SWT','Vxxxx' 应替换为 'VAL'

我期望的输出是;

"SWR CAR BOT BOT BOT VAL VAL"
"TNK TNK CAR BOT SWT LTC VAL VAL"

示例代码;

File.open('test.txt').each do |line|
output = line.gsub!('V', 'VAL')
puts output

到目前为止我已经尝试过(这显然不起作用,因为它将 V 的任何实例替换为 VAL)

这是为了自动生成机器可读的配置文件。

最佳答案

使用正则表达式:

File.open('test.txt').each do |line|
  output = line.gsub!(/\bV[^\s]*/, 'VAL')
  puts output
end

编辑:

对于多次替换,我建议使用哈希而不是像 case-when 这样的东西,并像下面这样构建正则表达式:

replacements = { 'V' => 'VAL', 'S' => 'SWT' }
str = "SW02 CAR03 B0932 B23(B) B32(A) V1000 V0020"
str.gsub(/\b(V|S)[^\s]*/) {|s| replacements[$1] }
#=> "SWT CAR03 B0932 B23(B) B32(A) VAL VAL"

关于ruby - 根据每个单词的起始字母替换字符串中的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37378508/

相关文章:

javascript - JQuery 选择器在 Ruby on Rails 中由 Ajax XHR 创建的表中的元素上找不到类

ruby - 处理并发 ruby​​ 线程池中的异常

ruby-on-rails - 将提交按钮图像添加到 Rails 表单

ruby - 在 Ruby 中解析巨大的 XML 不会处理服务器中的完整文件

php - 推特如何更改网址上的获取问号

ruby-on-rails - Ruby 社区重视简单性……您对在新项目中简化数据库模式有何看法?

ruby - Ruby 中的 SJCL AES-128-CCM 解密

ruby - 无法使用 require 加载文件

ruby - 基于 ANU 量子随机数服务器的随机数

ruby-on-rails - Rails + Postgres : How to `order` Using Multiple Possibly Nil Columns?