Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 替换模式中的空白_Regex - Fatal编程技术网

Regex 替换模式中的空白

Regex 替换模式中的空白,regex,Regex,我在邮件模板(HTML内容)中有变量(例如$!{Full Name},$!{Full Na me})。比如说。邮件模板的内容是:“买方名称是$!{全名}.Age是29。”在系统存储邮件模板之前,需要删除变量中的任何空格。因此,输出模板将是“买方名称为$!{FullName}。年龄为29岁。” 对于以下任何输入,所需输出为买方名称$!{FullName}。年龄29岁 买方名称为$!{全名}。年龄29岁 买方名称为$!{Full Na me}。年龄29岁 买方名称为$!{Full Na me}。年龄

我在邮件模板(HTML内容)中有变量(例如
$!{Full Name}
$!{Full Na me}
)。比如说。邮件模板的内容是:“买方名称是<代码>$!{全名}.Age是29。”在系统存储邮件模板之前,需要删除变量中的任何空格。因此,输出模板将是“买方名称为
$!{FullName}
。年龄为29岁。”

对于以下任何输入,所需输出为买方名称<代码>$!{FullName}。年龄29岁

  • 买方名称为<代码>$!{全名}。年龄29岁
  • 买方名称为<代码>$!{Full Na me}。年龄29岁
  • 买方名称为<代码>$!{Full Na me}。年龄29岁
  • 试用:
    \$\\{((?:\s*[a-zA-Z0-9\]*)\}
    替换为
    $!{$1}


    因为我需要在Java中实现这一点,所以我可以解析整个内容并将这些变量(例如,
    $!{Full Name}
    $!{Full Na me}
    )放入列表中。然后在删除空白后,是否再次将其放回?也许是个解决办法。但是,是否有其他解决方案?

    您可以通过两个步骤完成此操作

  • 获取分隔符({}之间的子字符串)-

  • 合并原始字符串和已更正的子字符串


  • 在Java中,最简单的解决方案是匹配
    $!{…}
    字符串,并在调用
    Matcher#appendReplacement
    时删除其中的所有空格:

    String s = "Buyer name is $!{ Full Na me}. Age is 29.";
    StringBuffer result = new StringBuffer();
    Matcher m = Pattern.compile("\\$!(\\{[^}]+})").matcher(s);
    while (m.find()) {
        m.appendReplacement(result, "\\$!" + m.group(1).replaceAll("\\s+", ""));
    }
    m.appendTail(result);
    System.out.println(result.toString());
    // => Buyer name is $!{FullName}. Age is 29.
    

    \$!(\{[^}]+})
    模式与
    $匹配{
    捕获到组1中,后面是除
    }
    之外的1+字符,然后是a
    }
    。在
    while
    块中,空格将使用
    .replaceAll(“\\s+”,“”)删除

    如果您是one regex解决方案的粉丝,您可以使用

    (\G(?!^)|\$!\{)([^}\s]*)\s+
    
    并替换为
    $1$2
    ,请参阅

    见:

    正则表达式匹配

    • (\G(?!^)\$!\{)
      -第1组(此部分将与
      $1
      反向引用一起保留):上一个匹配(
      \G(?!^)
      )或
      $!{
      子字符串结束
    • ([^}\s]*)
      -第2组(此部分将与
      $2
      反向引用一起保存):除
      }
      和空格之外的任何0+字符
    • \s+
      -1+空格(将被删除)

    请至少在这方面投入一些最小的努力。@MadPhysical我已经尝试过了。@MaxZoom我必须用java实现这一点。但现在我正在用atom进行测试。@hwnd我必须用java实现它。但现在我正在用原子做实验,我已经付出了努力。现在你能帮我一下吗?这是我试图实现的解决方案。
    String s = "Buyer name is $!{ Full Na me}. Age is 29.";
    StringBuffer result = new StringBuffer();
    Matcher m = Pattern.compile("\\$!(\\{[^}]+})").matcher(s);
    while (m.find()) {
        m.appendReplacement(result, "\\$!" + m.group(1).replaceAll("\\s+", ""));
    }
    m.appendTail(result);
    System.out.println(result.toString());
    // => Buyer name is $!{FullName}. Age is 29.
    
    (\G(?!^)|\$!\{)([^}\s]*)\s+
    
    String s = "Buyer name is $!{ Full Na me}. Age is 29.";
    s = s.replaceAll("(\\G(?!^)|\\$!\\{)([^}\\s]*)\\s+", "$1$2");
    System.out.println(s);
    // => Buyer name is $!{FullName}. Age is 29.