在emacs中,我可以在正则表达式中使用align-regexp的交替吗?

时间:2016-05-17 03:14:01

标签: regex emacs alignment text-alignment

例如,我有以下代码段:

'abc' => 1,  
'abcabc' =>2,  
'abcabcabc' => 3,

我想将其格式化为:

'abc'       => 1,  
'abcabc'    => 2,  
'abcabcabc' => 3,  

我知道有更简单的方法可以做到这一点但在这里我只是想练习我对align-regexp的理解。我已尝试过此命令,但它不起作用:

C-u M-x align-regexp \(\s-+\)=\|\(>\s-*\)\d 1 1 y

我哪里错了? 谢谢。

1 个答案:

答案 0 :(得分:5)

所以问题是:\(\s-+\)=\|\(>\s-*\)\d匹配\(\s-+\)= \(>\s-*\)\d 1 ,我们可以使用align-regexp在一行中对齐每个的备选方案。

答案是否定的 - align-regexp修改正则表达式的一个特定匹配组。在这种情况下,它是组1,组1在开头是\(\s-+\)。正则表达式的第1组不会因实际匹配的内容而异,因此它永远不会引用\(>\s-*\) 2

如果你可以表达你的正则表达式,它确实是一个正则表达式的一组,应该替换整个行中的每个匹配,你可以得到你想要的效果。

e.g。 >?\(\s-*\)[0-9=]会 - 至少对于显示的数据 - 会给出所需的结果。

1 在Emacs \d匹配d。那应该是[0-9] 2 一般不希望在对齐组中有任何非空格,因为Emacs会替换该组的内容。