我有以下文本文件:
输入文字文件:
<Person FirstName='Steve' LastName='Smith' Phone='555-12345' Title='Mr.' BirthDate='1950-01-01' />
<Person FirstName='Lin' LastName='Dan' Phone='555-12345' Title='Mr.' BirthDate='1950-01-01' />
我想得到以下内容:
期望输出文字:
Steve Smith
Lin Dan
答案 0 :(得分:1)
您可以将带有后向引用的正则表达式用于此:
M-x query-replace-regexp
RET .+?'\([A-Za-z]+\)'.+?'\([A-Za-z]+\)'.+
RET \1 \2
诀窍是编写一个与整行匹配的正则表达式,同时将要保留的内容放入括号组中,您可以在要生成的输出中引用它们。
另请参阅this对类似问题的回答,了解有关反向引用的更多信息以及指向Emacs手册相关部分的链接。
编辑:要替换的正则表达式的较短版本也适用于您提供的示例输入{。{1}}。
答案 1 :(得分:1)
仍然给出另一个答案,尽可能具体,使正则表达式更可靠。你想要精确插槽的内容,所以让我们使用它的名字:
(defun my-name-slots ()
(interactive)
(while (re-search-forward "FirstName='\\([^']+\\)'[ \t]+LastName='\\([^']+\\)'" nil t 1)
(message "%s %s" (match-string-no-properties 1) (match-string-no-properties 2) )))
当持有输出的(match-string-no-properties 1) (match-string-no-properties 2)
寻找时,
(list ...)
在函数的末尾会将其作为列表返回。