【问题标题】:How to represent the following pattern in Regex?如何在正则表达式中表示以下模式?
【发布时间】:2014-09-12 22:51:51
【问题描述】:

我有一个字符串,比如

KEY1="VALUE1",KEY2="VALUE2",KEY3="VALUE3" this is the end of line.

我正在尝试匹配 KEY1="VALUE1" 类型的字符串并将它们替换为更新的键值。

例如:整个模式 --> KEY1="VALUE1", 需要替换为 NEW_STUFF

我使用的正则表达式如下所示:

's/"([,]?)$KEY=\".*\"," " "/"$NEW_STUFF"/g`

但这并不是很好的结局。如果我的$KEY=KEY1

期待:NEW_STUFF KEY2="VALUE2",KEY3="VALUE3" this is the end of line.

实际结果:this is the end of line.

【问题讨论】:

  • 你说你想提取键/值对,但是你的代码做了一个替换。你要哪个?
  • @Borodin 我想提取和替换。很抱歉造成混乱
  • 那么您需要更详细地解释这意味着什么,包括显示您的文件的样子。
  • @Borodin 对这个令人困惑的问题感到非常抱歉。我修改了我的问题。希望这更清楚
  • 因此,例如,$KEY 包含 KEY1$NEW_STUFF 包含 NEW_STUFF;并且您想使用 $KEY$NEW_STUFF 的不同值多次执行此操作?我认为实际上$NEW_STUFF 将类似于KEY1="NEWSTUFF"

标签: regex bash perl shell


【解决方案1】:

好吧,我现在最好的猜测是,给定一个键,您想用另一个任意字符串替换该键及其值。如果是这样,那么这应该接近你所需要的

use strict;
use warnings;

my $str = 'KEY1="VALUE1",KEY2="VALUE2",KEY3="VALUE3" etc.';

my $key = 'KEY2';

$str =~ s/ \b $key = " [^"]* " /NEWSTUFF/x;

print $str, "\n";

输出

KEY1="VALUE1",NEWSTUFF,KEY3="VALUE3" etc.

【讨论】:

    【解决方案2】:

    我完全不确定您想要什么,因为您的 Perl 代码很奇怪,而且似乎无法反映您在问题中所说的内容。但是,处理这种数据格式很简单。

    我建议您将字符串处理成可以存储在哈希中的键/值对序列。然后你可以简单地访问你想要的任何值。

    这样

    use strict;
    use warnings;
    use 5.010;
    
    my $str = 'KEY1="VALUE1",KEY2="VALUE2",KEY3="VALUE3" etc.';
    
    my %data = $str =~ / (\w+) = " ([^"]*) " /gx;
    
    use Data::Dump;
    dd \%data;
    

    输出

    { KEY1 => "VALUE1", KEY2 => "VALUE2", KEY3 => "VALUE3" }
    

    【讨论】:

      猜你喜欢
      • 2020-07-24
      • 2011-06-12
      • 2012-02-12
      • 2010-10-11
      • 2021-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-29
      相关资源
      最近更新 更多