用正则表达式替换字符时是否有更聪明的方法来保留缩进?

时间:2013-10-26 05:41:38

标签: regex replace indentation keyboard-maestro

我想用连字符替换Markdown列表中的星号

示例:

  
      
  • 1.0      
        
    • 1.1
    •   
    • 1.2
    •   
  •   
  • 2      
        
    • 2.1      
          
      • 2.2
      •   
    •   
  •   

目前,我有一个单独的正则表达式模式,最多可在Keyboard Maestro为Mac设置三个缩进级别:

Keyboard Maestro Search and Replace with a Regex Pattern

我想知道是否有一种更聪明的方法可以做到这一点并且可以解决各种缩进问题。

2 个答案:

答案 0 :(得分:1)

在许多正则表达式搜索和替换系统中,您可以使用\1\2等引用替换中正则表达式中的带括号的组来引用每个连续的组。例如,在sed中你可以这样做:

sed -e 's/\(^[\t ]*\)\*/\1-/'

我不确定Keyboard Maestro是否为您提供该选项。它提到它使用ICU正则表达式;如果它还使用了替换选项,那么您可以使用$1$2等来指代替换。

如果没有,一切都不会丢失。您可以使用lookbehind断言来匹配星号前的空白序列,而不包括星号作为匹配的一部分;然后只需使用一个破折号作为替代品:

Search for: (?<=^[\t ]*)\*
Replace with: -

答案 1 :(得分:0)

您可以使用子匹配组并在替换字符串中引用它们,如下所示:

正则表达式将您的行与列表项匹配:([\t ]*)\*(.*)

用于替换的字符串:\1-\2