Ruby stdin不起作用
我有以下脚本:Ruby stdin不起作用,ruby,Ruby,我有以下脚本: $stdin.each_line do |data| blocks = data.scan(/\+[^+]+\+/) blocks.reject! { |b| b.include? "AAAAAAAAA" } p blocks end 此脚本将删除stdin文件中的A字符串。我有两个问题: stdin似乎不起作用,它输出[] 如何修改脚本以表示拒绝长度为20或以上的一段单字母,因此如果有长度为20或以上的a,请删除该块 要拒绝包含20个或更多
$stdin.each_line do |data|
blocks = data.scan(/\+[^+]+\+/)
blocks.reject! { |b| b.include? "AAAAAAAAA" }
p blocks
end
此脚本将删除stdin文件中的A字符串。我有两个问题:
[]
要拒绝包含20个或更多相同大写字符的所有块,请执行以下操作:
$stdin.each_line do |data|
blocks = data.scan(/\+[^+]+\+/)
('A'..'Z').each do |ch|
r = Regexp.new("[" + ch + "]{20,}")
blocks.reject! { |b| r =~ b }
end
p blocks
end
这将生成26个正则表达式(每个大写字符对应一个正则表达式),并根据它们匹配块。当然,只构建一次并将它们存储在数组或类似的数组中,而不是为输入中的每一行重新构建它们,效率会更高 更紧凑的解决方案:
r = /([a-z])\1{19,}/
$stdin.each_line do |data|
blocks = data.scan(/\+[^+]+\+/)
blocks.reject! { |b| r =~ b }
p blocks
end
这一个使用一个正则表达式来匹配单个字符,然后直接匹配19个或更多相同字符(使用反向引用)。拒绝的正则表达式!声明如下:
/([A-Z])\1{19}/
这将匹配任何大写字母,后跟19个完全相同的字母。您如何发送输入?您是否也可以添加您想要的测试输入/输出?您所说的“它不工作”是什么意思?如果我执行你的脚本并输入+aaaaaaa++BBBBB++aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa。你到底想拆分/拒绝什么?请提供一个例子。不确定,但可能与此问题相关/相同。分子生物学研究还是什么
A
代表腺嘌呤?你测试过吗?如果运行此脚本并在一行中输入+AAAAA++BBBBB++aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa。如果这不是您所期望的,请解释您正试图实现的目标。当我运行脚本时,我有一个包含许多+/n到/n+的文件,当我输入数据文件号时,它只输出[]。知道为什么吗?thanks@Mark请发布一个完整的会话示例,包括您在STDIN上输入的数据,并解释您的脚本与您期望的不同之处!