这是一个很愚蠢的问题——但我在画一个空白!我有一个测试字符串:
Foo|||bar||something|whatever
Run Code Online (Sandbox Code Playgroud)
我需要更换||与|EMPTY_STRING|每个实例。
我正在做:
s/\Q||/|EMPTY_STRING|/g;
Run Code Online (Sandbox Code Playgroud)
问题是,这将其转换为:
Foo|EMPTY_STRING||bar|EMPTY_STRING|something|whatever
Run Code Online (Sandbox Code Playgroud)
注意 || 在那里。我一定错过了一些愚蠢的东西。它是什么?
您可以在正则表达式中使用环视:
s='Foo|||bar||something|whatever'
perl -pe 's/(?<=\|)(?=\|)/EMPTY_STRING/g' <<< "$s"
Run Code Online (Sandbox Code Playgroud)
Foo|EMPTY_STRING|EMPTY_STRING|bar|EMPTY_STRING|something|whatever
Run Code Online (Sandbox Code Playgroud)
正则表达式详细信息:
(?<=\|): Lookbehind 断言我们|落后于当前位置(?=\|): Lookahead 断言我们|领先于当前位置