正则表达式从组中删除空格
Posted
技术标签:
【中文标题】正则表达式从组中删除空格【英文标题】:Regex Remove white spaces from a group 【发布时间】:2018-06-11 02:27:50 【问题描述】:嗨,我有以下价值观
000001010016C02AB 111*
000001010016C02 111H
000001010016C 111
预期的输出是
00000101001,C02AB,*
00000101001,C02,H
00000101001,C,
值可能会有所不同。此字符串的长度将始终为 23。如果字符不存在,则该位置将用空格填充。我现在拥有的正则表达式是
(^.11)[0-9](.5)(?:.5)(.*)
但在第二组中使用此正则表达式时,会返回空格。我希望删除那些空白。
电流输出:
00000101001,C02AB,*
00000101001,C02 ,H
00000101001,C ,
谁能帮我去掉第二组的空格?
Demo
【问题讨论】:
您的正则表达式风格(您使用的语言)是什么? @JorgeCampos Java 【参考方案1】:使用结束断言$
可以轻松匹配:
^(.11)\d(\w+).+(.)$
【讨论】:
【参考方案2】:在 Java 中,您可以使用 Matcher#appendReplacement()
和 trim()
matcher.group(2)
值实现自定义替换逻辑:
String strs[] = "000001010016C02AB 111*", "000001010016C02 111H", "000001010016C 111 ", "901509010012V 154 ";
Pattern p = Pattern.compile("(.11)[0-9](.5).5(.*)");
for (String s: strs)
StringBuffer result = new StringBuffer();
Matcher m = p.matcher(s);
if (m.matches())
m.appendReplacement(result, m.group(1) + "," + m.group(2).trim() + "," + m.group(3));
System.out.println(result.toString());
结果:
00000101001,C02AB,*
00000101001,C02,H
00000101001,C,
90150901001,V,
请参阅Java demo。
注意我删除了^
,因为Matcher#matches()
方法需要完整的字符串匹配。如果字符串可能包含换行符,请使用Pattern.DOTALL
选项。
【讨论】:
【参考方案3】: 查找:^(.11)\d(\S+)\s*.3(.?)$
替换:$1,$2,$3
说明:
^ : beginning of string
(.11) : 11 any character, stored in group 1
\d : 1 digit
(\S+) : 1 or more non spaces, stored in group 2
\s* : 0 or more spaces
.3 : 3 any character
(.?) : 0 or 1 character, stored in group 3
$
结果:
00000101001,C02AB,*
00000101001,C02,H
00000101001,C,
【讨论】:
【参考方案4】:在正则表达式中有捕获组,只需将这两个组连接起来就可以得到结果,在连接中可以插入逗号
^(\w+)\s*\d+(\D+)$
组就是里面的东西()
【讨论】:
我正在寻找删除捕获的空白。在此处查看示例regex101.com/r/vjucI9/2以上是关于正则表达式从组中删除空格的主要内容,如果未能解决你的问题,请参考以下文章