Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex emacs正则表达式如何获取特定列_Regex_Emacs - Fatal编程技术网

Regex emacs正则表达式如何获取特定列

Regex emacs正则表达式如何获取特定列,regex,emacs,Regex,Emacs,我有以下文本文件: 输入文本文件: <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 您可以

我有以下文本文件:

输入文本文件:

<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
您可以使用带有反向引用的regexp:

M-x
query replace regexp

RET
+?'\([A-Za-z]+\)。+?'\([A-Za-z]+\)。++

RET
\1\2

诀窍是编写一个匹配整行的regexp,同时将要保留的内容放入括号内的组中,以便在要生成的输出中引用

另请参阅对类似问题的回答,以了解有关反向参考的更多信息以及指向Emacs手册相关部分的链接



编辑:要替换的regexp的较短版本也适用于您给出的示例输入,它将是
+?'\(.+?\)'.+?'\(.+?\)。++

给出另一个答案,尽可能具体使正则表达式更可靠。您需要精确插槽的内容,因此让我们使用其名称:

(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) )))
作为持有查找的输出的
(匹配字符串无属性1)(匹配字符串无属性2)

(list ...)

在函数末尾,它将作为列表返回。

不要忘记,如果您想在Emacs中测试正则表达式,可以使用
M-x regexp builder
添加到@Andreas Röhler的伟大答案中,Emacs可能是也可能不是用于此的正确工具,这取决于用例。这将如何适应更大的东西?命令行工具更有意义吗?