Regex 正则表达式匹配两个字符之间的所有空格

Regex 正则表达式匹配两个字符之间的所有空格,regex,Regex,这应该很容易,但由于某种原因,我无法让它工作 如何替换“[”和“]”字符之间的所有空格 以下是示例文本: [HTTP Referrer] NVARCHAR(MAX) NULL, [Original URL] NVARCHAR(MAX) NULL, [Install App Store] NVARCHAR(MAX) NULL, [Match Type] NVARCHAR(128) NULL, [Contributor 1 Match Type] NVARCHAR(128) NULL, [

这应该很容易,但由于某种原因,我无法让它工作

如何替换“[”和“]”字符之间的所有空格

以下是示例文本:

[HTTP Referrer] NVARCHAR(MAX) NULL, 
[Original URL] NVARCHAR(MAX) NULL, 
[Install App Store] NVARCHAR(MAX) NULL, 
[Match Type] NVARCHAR(128) NULL, 
[Contributor 1 Match Type] NVARCHAR(128) NULL, 
[Contributor 2 Match Type] NVARCHAR(128) NULL, 
[Contributor 3 Match Type] NVARCHAR(128) NULL, 
[Device Category] NVARCHAR(128) NULL, 
[Google Play Referrer] NVARCHAR(MAX) NULL, 
[Google Play Click Time] DATETIME2 NULL, 
[Google Play Install Begin Time] DATETIME2 NULL,
[CreatedOn] DATETIME2 NOT NULL,
[ModifiedOn] DATETIME2 NOT NULL,
[Retired] BIT NOT NULL
如何捕捉括号中的空格:

替换正则表达式匹配项后的所需输出为:

[HTTPReferrer] NVARCHAR(MAX) NULL, 
[OriginalURL] NVARCHAR(MAX) NULL, 
[InstallAppStore] NVARCHAR(MAX) NULL, 
[MatchType]NVARCHAR(128) NULL, 
[Contributor1MatchType] NVARCHAR(128) NULL, 
[Contributor2MatchType] NVARCHAR(128) NULL, 
[Contributor3MatchType] NVARCHAR(128) NULL, 
[DeviceCategory] NVARCHAR(128) NULL, 
[GooglePlayReferrer] NVARCHAR(MAX) NULL, 
[GooglePlayClickTime] DATETIME2 NULL, 
[GooglePlayInstallBeginTime] DATETIME2 NULL,
[CreatedOn] DATETIME2 NOT NULL,
[ModifiedOn] DATETIME2 NOT NULL,
[Retired] BIT NOT NULL
我没有发布我正在尝试的正则表达式,因为到目前为止它是垃圾。甚至不接近目标

这一点越来越接近:

(?:\G(?!^)|\[)[^,]*?\K\s(?=[^\]]*)

您可以使用此先行正则表达式方法查找
]
字符前面的所有空格:

\h+(?=[^]]*\])
正则表达式详细信息:

  • \h+
    :匹配1+个水平字符
  • (?=[^]]*\])
    :向前看,断言前面有
    ]
    ,中间没有任何
    ]

或者,您可以使用
\G
的方法,如您的问题所示:

(?:\[|(?!^)\G)[^]\s]*\K\h+

这里是一个使用sed的实际示例,通过将其用作分隔符并将其从替换中排除来定位括号之间的每个空格

t_STR=$(cat /tmp/example.txt); # slurp in the text
for i in $(seq $(echo "$t_STR"|grep -c ' '));do # how many spaces?
   t_STR="$(echo "$t_STR"|sed 's/\(\[.*\) \(.*\]\)/\1\2/g')"; # remove them
done
echo "$t_STR"
如果每对括号内只有一个空格,则:
sed's/\(\[.\)\(..\]\)/\1\2/'
工作(即使使用/g sed,也仅使用此regexp删除一个空格。)


您正在尝试对每行的前半部分应用“remove spaces”,并使用“]”作为分隔符,因此,(在某些情况下)将行拆分为两行,然后在前半部分上使用“]”将这两行连接在一起可能更有效

考虑到我提供的示例数据,您的第一个示例似乎不起作用。第二个例子是“砰砰”的一声。谢谢