阅读时如何忽略文件中的注释或空白/空行?我以为 /^[\s#]*$/
可以完成这项工作,但事实并非如此:
irb(main):180:0> open(inFile, 'r').each { |ln| puts ln if ln !~ /^[\s#]*$/ }
....
....
# and ..... ThIs Is A cOmMeNt .....
....
....
=> #<File:/tmp/running-instances.txt>
irb(main):181:0>
我在这里错过了什么?任何帮助将不胜感激。干杯!
附言。
不过我可以分两步完成:
open(inFile, 'r').each { |ln| next if ln =~ /^\s*$/; puts ln if ln !~ /#[^#]*$/ }
最佳答案
匹配注释和行尾
/
^ # match start of line
\s* # match zero or more spaces
(\#|$) # match comment symbol or end-of-line
/x
压缩后的正则表达式如下所示:
/^\s*(#|$)/
散文解释
\s*
表示可以匹配紧跟在行首之后的任意数量的空格,包括完全没有。 (\#|$)
使用 alternation , 因此括号内的任一模式都可以匹配。 注意:只有在使用 x
option 时才需要反斜杠来转义注释符号, 忽略正则表达式中的空格和注释;如果您不使用 x
,则不要使用反斜杠。
因此,该模式将匹配行首后跟可选的空格,然后必须紧跟注释符号或行尾。因为匹配是 anchored ,它将不匹配"foo # bar"
或"Array#string\n"
之类的字符串,因为它们不匹配所需的模式.
关于ruby - 正则表达式匹配文件中的空行和注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18338100/