如果方括号内的内容不包含空格,则去除方括号

Remove square brackets if content within the square bracket does not contain spaces

我有一个要求,我需要将 sql 从一种格式转换为另一种格式。

下面是示例

select [Project_ID] AS [Project ID]

将以上行转换为:

select Project_ID AS "Project ID"

所以我的想法是2步策略

  1. 如果我能以某种方式删除中间没有空格的 1 的 []。可能是通过 Regex
  2. 将 [ 和 ] 替换为 " 其余的 1s。

我有超过 10K 行代码需要更改。手动工作会花费我很多时间来完成这件事。

这是两个正则表达式替换的简单任务。

先把\[([^\[\] \r\n]+)\]换成</code>。这将从非 space 字符串中删除括号。</p> <p>接下来将 <code>\[([^\[\] \r\n]+ [^\[\]\r\n]+)\] 替换为 ""。这将用 spaces.

替换字符串上的双引号括号

请注意,两个替换项都包括 \[\]\r\n。将替换限制为本身不包含括号的字符串和不包含换行符的字符串。

在进行此类编辑之前,请备份您的文件。因为上面做了两个单独的替换,所以有嵌套括号的行可能会被错误地对待。

如果所有代码行的格式都与 select [Project_ID] AS [Project ID] 相同,那么您可以按以下顺序执行此操作:

1:将] as [替换为AS " -- (Space AS ")

2:将[替换为</code> -- (Space)</p> <p>3:将<code>]替换为"

编辑:

如果数据是混合格式:
select [Project_ID] AS [Project ID] 也许 select [Project_ID] [Project ID]

那么您可以按以下顺序进行:

1:将] as [替换为AS " -- (Space AS ")

2:将] [替换为" -- (Space ")

3:将[替换为</code> -- (Space)</p> <p>4:将<code>]替换为"

您可以使用两个正则表达式来获得所需的格式。

按照以下步骤操作:

  1. 备份你的主文件。在另一个临时文件中执行此操作。
  2. 在搜索模式下执行 Ctrl + H 和 select "Regular expressions"
  3. 在"find what"框中写入:(?i)(?<=select)\s+[|]\s+(?=as)
    • 然后点击全部替换。
  4. 在"find what"框内填写:[([^[]]+)]
    • 输入"replace box"并点击全部替换:“\1”

不是最有效的方法。但是 OP 可以 awk

 awk -F'['  '{gsub(/\]/ , "", ); gsub(/\]/ ,"" ,);  ="2""2"; print}'   ;

演示:

$echo "select [Project_ID] AS [Project ID]" | awk -F'['  '{gsub(/\]/ , "", ); gsub(/\]/ ,"" ,);  ="2""2"; print}'   ;
select  Project_ID AS  "Project ID"
$

解释:

awk -F'[' -- Set delimiter as  "["

gsub(/\]/ , "", ); -- Replace ]  with "" in second field. We pass regular expression between / / and \ - is escape character 

gsub(/\]/ ,"" ,) -- Remove ] from third field. 


 ="2""2"  -- Concat double quotes at start and end of 3rd field. 

您可以一步完成两个替换:

  • Ctrl+H
  • 查找内容:\[(\w+)\]|\[([^\]]+)\]
  • 替换为:(?1:(?2""))
  • 检查 环绕
  • 检查 正则表达式
  • 全部替换

解释:

  \[            # opening square bracket
  (\w+)         # group 1, 1 or more word character
  \]            # closing square bracket
|           # OR
  \[            # opening square bracket
  ([^\]]+)      # group 2, 1 or more any character that is not a closing bracket
  \]            # closing square bracket

替换:

(?1             # if group 1 exists:
                # replace with content of group 1
  :             # else
  (?2             # if group 2 exists:
    ""            # replace with content of group 2 suround with quotes
  )               # endif group 2
)               # endif group 1

截图(之前):

截图(后):