我试图格式选项卡的多行分隔下面调用replace-match时,如何评估替换字符串中的lisp表达式?
ID Name Duration Start_Date Finish_Date Predecessors Successors Resource_Group Deadline Constraint_Type
形式的数据转换成使用下面的Lisp代码字段列表。
(while (re-search-forward "\\(.*\\)\t\\(.*\\)\t\\(.*\\)\t\\(.*\\)\t\\(.*\\)\t\\(.*\\)\t\\(.*\\)\t\\(.*\\)\t\\(.*\\)\t\\(.*\\)\t\\(.*\\)\t\\(.*\\)\t\\(.*\\)\t\\(.*\\)\t\\(.*\\)\t\\(.*\\)" nil t)
(replace-match
"* \\2
:PROPERTIES:
:task_id: \\1
:duration: \\3
:start: \\4
:finish: \\5
:predecessors: \\6
:successors: \\7
:resource_group: \\8
:deadline: \\9
:constraint_type: \\,(match-string 10)
:END:"
nil nil))
代码按预期执行,直到达到第10个回参考匹配的字符串。我发现一个解决方案来反引用大于9的组是使用lisp函数(match-string 10)。当以交互方式使用replace-regexp时,如果替换字符串中的lisp代码被前缀为'\,',并且./(match-string 10)的行为与我期望的交互地调用replace-regexp时相同;
但是,上述代码块中的\\,(匹配字符串10)会产生错误。我已经尝试了一,二,三,四等'',但它要么产生相同的错误,要么打印字符串。有谁知道使用此功能的方法或参考大于9的组号的方法吗?
非常感谢!
你应该也可以upvote你自己选择的正确答案。 – 2012-08-16 00:48:14
我该如何upvote?我是新人,在常见问题解答中找不到关于投票如何/为什么会起作用的任何内容。有关如何工作的任何提示将有所帮助,谢谢。 – user1593649 2012-08-17 13:44:22