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
M-x align regexp是否删除文本?_Regex_Emacs - Fatal编程技术网

M-x align regexp是否删除文本?

M-x align regexp是否删除文本?,regex,emacs,Regex,Emacs,下面是我试图格式化的文本示例: (9 12 19 38 0 -39 -20 -13 -10) (7 9 14 29 0 -30 -15 -10 -8) (4 6 9 19 0 -20 -10 -7 -5) (2 3 4 9 0 -10 -5 -4 -3) (0 0 0 0 0 0 0 0 0) (-3 -4 -5 -10 0 9 4 3 2) (-5 -7 -10 -20 0 19 9 6 4) (-8 -10 -15 -30 0 29 14 9 7) (-10 -13 -20 -39 0 38

下面是我试图格式化的文本示例:

(9 12 19 38 0 -39 -20 -13 -10)
(7 9 14 29 0 -30 -15 -10 -8)
(4 6 9 19 0 -20 -10 -7 -5)
(2 3 4 9 0 -10 -5 -4 -3)
(0 0 0 0 0 0 0 0 0)
(-3 -4 -5 -10 0 9 4 3 2)
(-5 -7 -10 -20 0 19 9 6 4)
(-8 -10 -15 -30 0 29 14 9 7)
(-10 -13 -20 -39 0 38 19 12 9)
我希望每一列在数字上对齐(即,如果有减号,请添加额外的空格)

如果我这样做:C-uM-x
align regexp
RET
\([[:digit:][]+\)
retret
y

我明白了:

(9  12 19 38 0 -3 -2 -1 -1)
(7  9  14 29 0 -3 -1 -1 -8)
(4  6  9  19 0 -2 -1 -7 -5)
(2  3  4  9  0 -1 -5 -4 -3)
(0  0  0  0  0 0  0  0  0 )
(-3 -4 -5 -1 0 9  4  3  2 )
(-5 -7 -1 -2 0 19 9  6  4 )
(-8 -1 -1 -3 0 29 14 9  7 )
(-1 -1 -2 -3 0 38 19 12 9 )
(9 1 1 3 0 - - - -)
(7 9 1 2 0 - - - -)
(4 6 9 1 0 - - - -)
(2 3 4 9 0 - - - -)
(0 0 0 0 0 0 0 0 0)
(- - - - 0 9 4 3 2)
(- - - - 0 1 9 6 4)
(- - - - 0 2 1 9 7)
(- - - - 0 3 1 1 9)
非常接近,但不是我想要的

如果我试图修改表达式以包含减号,比如:
\(?[:digit:]+\)

然后我得到这个:

(9  12 19 38 0 -3 -2 -1 -1)
(7  9  14 29 0 -3 -1 -1 -8)
(4  6  9  19 0 -2 -1 -7 -5)
(2  3  4  9  0 -1 -5 -4 -3)
(0  0  0  0  0 0  0  0  0 )
(-3 -4 -5 -1 0 9  4  3  2 )
(-5 -7 -1 -2 0 19 9  6  4 )
(-8 -1 -1 -3 0 29 14 9  7 )
(-1 -1 -2 -3 0 38 19 12 9 )
(9 1 1 3 0 - - - -)
(7 9 1 2 0 - - - -)
(4 6 9 1 0 - - - -)
(2 3 4 9 0 - - - -)
(0 0 0 0 0 0 0 0 0)
(- - - - 0 9 4 3 2)
(- - - - 0 1 9 6 4)
(- - - - 0 2 1 9 7)
(- - - - 0 3 1 1 9)

这是一个bug,还是有什么我不知道的?

指定组(通常是组1)匹配的文本会被扩展或收缩,因此组中的非空白字符会被删除,如您所见。除非,也就是说,启用了对齐,这是通过向
align regexp提供一个负数组号来指示的:

C-uM-x
align regexp
RET
\(\s-*-?\)[0-9]+
RET
-1
RET
y

如果需要,可以通过在匹配组中包含数字来对齐每个数字的“一”位上的列:

C-uM-x
align regexp
RET
\(\s-*-?[0-9]+\)
RET
-1
RET
y

在任何一种情况下,都会在每个左括号后插入一个额外的空格。我看不出任何方法可以阻止
align regexp
这样做,但是如果您经常这样做,您可以将其包装在执行
align regexp
的命令中,然后将regexp
“^(
替换为
”(
原始区域中的任何地方)。

Emacs修改(即,添加空格或从中删除字符)regexp中对齐列的第一个匹配组。如果您重写了建议的
\(\s-*\)
regexp而不是附加到它,这就解释了为什么Emacs会从文本中删除字符。