捕捉朱莉娅前面的空白

时间:2017-11-29 23:17:32

标签: regex string julia whitespace

我需要添加一段很长的代码,并且更愿意使用脚本而不是自己编写,以免引入错误。

我的命令看起来像这样

    rename oldname newname 

      rename oldname2 newname2

我想,每当我看到命令“重命名”时,我想添加一个“注释”命令

    rename oldname newname 
        note newname: "A Note"

        rename oldname2 newname2
            note newname2: "A Note"

我正在使用Julia的读写功能来实现这一目标,到目前为止它非常容易。

f = open("renaming.txt") # open input file
g = open("renaming_output.txt", "w") # open output file

for ln in eachline(f)
   write(g, "$ln \n") # write the command, no matter what it is
   stripped = lstrip("$ln") # Strip whitespace so I can use "startswith" command
   if startswith(stripped, "ren")
          words = split("$ln", " ") # split on space to get the "newvar" name
          println("$ln \n") #check that I am working with a rename command
              println("note ", words[3]":") # check that the note function prints
              note_command = string("note ", words[3], ": \n") # construct the note command
              write(g, note_command) #write it to the output file. 
       end
end

我的问题是缩进。上面的代码在最左边写了“note”命令,没有任何缩进。但是,理想情况下,我希望note命令比rename命令缩进一级。但我无法弄清楚如何捕获所有前面的空格。

我认为答案涉及使用matchm.match函数,但我无法使其工作。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

在Julia 0.7上,代码中最简单的变化就是替换

println("note ", words[3]":")

println(first(ls, search(ls, 'r')-1), "    note ", words[3]":")

使用正则表达式,您可以在代码的开头编写rx = r"(?:(?!r).)*",然后:

println(match(rx, ls).match, "    note ", words[3]":")

在这两种情况下,我们都会保持原始格式ls'r'的开头。

答案 1 :(得分:1)

使用Julia 6.1,我的解决方案,在答案的帮助下,如下

leftpad = ^ search("$ln", 'r')

r是关键的补充。鉴于我的代码的左边填充总是标签,我只是插入标签的数量,因为在第一个LIKE之前有字符。此解决方案适用于0.6.1,但搜索在.7中的行为可能不同。