Regex 替换模式中的空白
我在邮件模板(HTML内容)中有变量(例如Regex 替换模式中的空白,regex,Regex,我在邮件模板(HTML内容)中有变量(例如$!{Full Name},$!{Full Na me})。比如说。邮件模板的内容是:“买方名称是$!{全名}.Age是29。”在系统存储邮件模板之前,需要删除变量中的任何空格。因此,输出模板将是“买方名称为$!{FullName}。年龄为29岁。” 对于以下任何输入,所需输出为买方名称$!{FullName}。年龄29岁 买方名称为$!{全名}。年龄29岁 买方名称为$!{Full Na me}。年龄29岁 买方名称为$!{Full Na me}。年龄
$!{Full Name}
,$!{Full Na me}
)。比如说。邮件模板的内容是:“买方名称是<代码>$!{全名}.Age是29。”在系统存储邮件模板之前,需要删除变量中的任何空格。因此,输出模板将是“买方名称为$!{FullName}
。年龄为29岁。”
对于以下任何输入,所需输出为买方名称<代码>$!{FullName}。年龄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.
看
\$!(\{[^}]+})
模式与$匹配按字面意思,然后将a{
捕获到组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.