regex 正则表达式问题使用sublime(查找/替换)

5q4ezhmt  于 11个月前  发布在  其他
关注(0)|答案(3)|浏览(108)

好的,使用bash终端或在sublime中使用find/replace,我想找到:

BLK=$'\e[0;30m'
RED=$'\e[0;31m'
GRN=$'\e[0;32m'
YEL=$'\e[0;33m'
BLU=$'\e[0;34m'
MAG=$'\e[0;35m'
CYN=$'\e[0;36m'
WHT=$'\e[0;37m'

字符串
前3个字母,和=$,并replqace它与前3别名那些前3个字母=“echo -e(一切之后的报价和之前的最后一个报价).到目前为止,甚至没有这个:
这就是我卡住的地方:
我可以找到/替换别名(前3个字母),但不能完成其余部分。该正则表达式如下所示:

Find: ([A-Z]{3,5})(\=\$)(?:\')(\\e\[\d\;?\d{1,3}m)(?:\')
Replace: alias  \1


但似乎不能完成整个事情。使用崇高的文本编辑器。

nvbavucw

nvbavucw1#

使用Sublime,您可以使用2个捕获组,而不是将=添加到第一个捕获组,并将关闭的'添加到第二个捕获组。
您可以找到:

([A-Z]{3,5}=)\$'(\\e\[\d\;?\d{1,3}m')

字符串
并替换为:

alias $1'echo -e $2


参见regex demo
请注意,您不必对引号进行转义,也可以省略非捕获组,因此(?:\')将仅为'

nbewdwxp

nbewdwxp2#

它可能是替换字符串;模式是正确的。(我只熟悉Java,并在这里发布了一个工作解决方案。请查看它是否有助于您创建等效的Sublime替换。)

String s = "BLK=$'\\e[0;30m'\nRED=$'\\e[0;31m'\nGRN=$'\\e[0;32m'";

Pattern p = Pattern.compile( "([A-Z]{3,5})(\\=\\$)(?:\\')(\\\\e\\[\\d\\;?\\d{1,3}m)(?:\\')" );
Matcher m = p.matcher( input );

while( m.find() ){
    String repl = m.replaceAll( "alias $1='echo -e $3'" );
    System.out.println( repl );
}

字符串
如果你不熟悉Java:

  • 由于\的转义字符太多,这个模式看起来有点混乱。但是我使用了和你发布的完全一样的模式,也就是([A-Z]{3,5})(\=\$)(?:\')(\\e\[\d\;?\d{1,3}m)(?:\')
  • 在Java中,组被标识为$1$2等,而不是\1\2等。
    结果

对于代码中的input值,我从您的问题中获取,以下是输出:

alias BLK='echo -e \e[0;30m'
alias RED='echo -e \e[0;31m'
alias GRN='echo -e \e[0;32m'

h9a6wy2h

h9a6wy2h3#

尝试以下 * 捕获模式 *。

(.+?)=\$'(.+?)'

字符串
以及以下替换文本。

alias $1='echo -e $2'


输出

alias BLK='echo -e \e[0;30m'
alias RED='echo -e \e[0;31m'
alias GRN='echo -e \e[0;32m'
alias YEL='echo -e \e[0;33m'
alias BLU='echo -e \e[0;34m'
alias MAG='echo -e \e[0;35m'
alias CYN='echo -e \e[0;36m'
alias WHT='echo -e \e[0;37m'

相关问题