小编use*_*649的帖子

emacs函数在regexp中重新搜索前向解释\(\)组字符

我成功地以交互方式使用replace-regexp,用非引用版本替换下面显示的缓冲区中的每个引用文本实例.我搜索的正则表达式是

\"\([^\"]*\)\" 
Run Code Online (Sandbox Code Playgroud)

我插入的NEWTEXT是\ 1.

* "PROJECT START"
:PROPERTIES:
:ID: 1
:Unique_ID: 17
:DURATION: "0 days"
:TYPE: "Fixed Work"
:OUTLINE_LEVEL: 1
:END:
Run Code Online (Sandbox Code Playgroud)

交互式地,aboe文本变成了下面的文本.

* PROJECT START
:PROPERTIES:
:ID: 1
:Unique_ID: 17
:DURATION: 0 days
:TYPE: Fixed Work
:OUTLINE_LEVEL: 1
:END:
Run Code Online (Sandbox Code Playgroud)

我尝试通过插入以下两行以编程方式执行相同的搜索和替换

(while (re-search-forward "\"\([^\"]*\)\"" nil t)
  (replace-match "\1" nil nil ))
Run Code Online (Sandbox Code Playgroud)

在缓冲区的顶部并执行,但它只返回nil而没有找到一个匹配.

当我省略了

\( \) 
Run Code Online (Sandbox Code Playgroud)

将\ 1分组并替换为\&

(while (re-search-forward "\"[^\"]*\"" nil t)
  (replace-match "\&" nil nil ))
Run Code Online (Sandbox Code Playgroud)

我将每个引用的字符串替换为'&'.

* &
:PROPERTIES:
:ID: 1
:Unique_ID: 17
:DURATION: &
:TYPE: &
:OUTLINE_LEVEL: 1 …
Run Code Online (Sandbox Code Playgroud)

regex emacs regex-group

5
推荐指数
1
解决办法
809
查看次数

在调用replace-match时如何评估替换字符串中的lisp表达式?

我正在尝试格式化以下表单的多行TAB分隔数据

ID  Name    Duration    Start_Date  Finish_Date Predecessors    Successors  Resource_Group  Deadline    Constraint_Type 
Run Code Online (Sandbox Code Playgroud)

使用下面的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))
Run Code Online (Sandbox Code Playgroud)

代码按预期执行,直到达到第10个反向引用的匹配字符串.我发现一个反向引用大于9的组的解决方案是使用lisp函数(match-string 10).当以交互方式使用replace-regexp时,如果替换字符串中的lisp代码前面带有'\,',则会对其进行评估,而./(match-string 10)的行为与我预期的交互式调用replace-regexp时的行为相同;

但是,上面代码块中的\\,(匹配字符串10)会产生错误.我已经尝试了一个,两个,三个,四个等''',但它会产生相同的错误或打印一个文字字符串.有没有人知道使用此功能的方法或引用大于9的组号的方法?

非常感谢!

string emacs

2
推荐指数
1
解决办法
150
查看次数

标签 统计

emacs ×2

regex ×1

regex-group ×1

string ×1