Ruby匹配多字符串正则表达式

Ruby匹配多字符串正则表达式,ruby,Ruby,我正在尝试增强下面的脚本,以便只打印应该具有的唯一值 *)6个字符-字母数字和小写或小写 *)从目录中的文件列表中,以map开头的单词 我试过的 values = [] @files = Dir.glob("*.txt") for values in @files file = File.read(values) file.split(' ').each do |line| values.push(line.gsub(',', '')) if line.match(/[a-z0-9]

我正在尝试增强下面的脚本,以便只打印应该具有的唯一值 *)6个字符-字母数字和小写或小写 *)从目录中的文件列表中,以map开头的单词

我试过的

values = []
@files = Dir.glob("*.txt")
for values in @files
 file = File.read(values)
 file.split(' ').each do |line|
    values.push(line.gsub(',', '')) if line.match(/[a-z0-9]{6}/) end or unless values.include? line.gsub(',', '') or line.match(/map_.*/)
  end
end

puts values
示例,

文件1

[id]
col1 = map_dr_check, map_iop, foo123
col2 = bar123, FOO123
col3 = ta2ngo, bar123

[/id_check]
@col2 = dr
@col1 = r
文件2

[id]
col1 = map_dr_check, map_iop, foo123
col2 = alp23r
col3 = poi90k, bar123

[/id_check]
@col2 = *
@col1 = r
预期产量

map_dr_check
map_iop
foo123
ta2ngo
bar123
alp23r
poi90k
但是我的输出是空的,我不确定我的正则表达式哪里出了问题,也不确定.match方法是否受字符串支持。

使用:


对于您的示例(未经测试):


哦,我的天,如果line.match(/[a-z0-9]{6}/)end或除非value.include,你做了什么?line.gsub(',','')或line.match(/map..*/)@engineersmnky:我对格式错误的语法感到抱歉,我对Ruby非常陌生,只是在探索概念。你能在这里纠正我吗,谢谢。ruby新手还是编程新手?我询问的原因是,如果您来自另一种语言,那么您的条件就相当于
if line.match(/[a-z0-9]{6}/)或(如果不是(values.include?(line.gsub(',','')或line.match(/map.*/)
,我相信您也不会在其他任何地方编写它。此外,在ruby中,通常会使用
|
来代替
,因为它具有不同(更高)的优先级。@engineersmnky:对不起,编程新手。非常感谢您的帮助,再次感谢。非常感谢您的关注,当我尝试上述解决方案时,
Dir.glob(“*.txt”).flat|map do | file | value=file.read(file).split.grep(/\a[[:alnum:]{6}\z |\Amap |.*/)将值结束
我面临以下错误未定义的方法“flat|map”用于升级您的ruby,
平面地图
是否适用于以下年龄段:
input = ... # get it from files, or whatever
input.split.grep(/\A[[:alnum:]]{6}\z|\Amap_.*/)
Dir.glob("*.txt").flat_map do |file|
  File.read(file).split.grep(/\A[[:alnum:]]{6}\z|\Amap_.*/)
end