java - 如何从字符串中删除字母值以及如何在描述中获得所需的字符串?
问题描述
我有以下字符串:
String textString = "Value for CH2 234 45 HH 2546";
我需要一个正则表达式来删除数字之间的空格,但如果在数字之前有一个非数字值,我也想避免
String texString="23445 2546";
这里要避免在任何非数值之后的数值这里在我的字符串中要避免在 H 之后的数值也有 2 但我只想制作一个像“23445 2546”这样的字符串。如果有任何字母字符,则应将其删除并在数字之间添加空格。
static String getNumber(String textString) {
StringBuilder sb = new StringBuilder();
Matcher matcher = Pattern.compile("(?<!\\w)\\d+(?!\\w)").matcher(textString);
while (matcher.find()) {
sb.append(matcher.group());
}
return sb.toString();
}
从上面的正则表达式和代码我得到输出:
String texString="234452546";
所需输出:
String texString="23445 2546";
更新:
如果有类似的字符串
String textString = "Value for CH2 234 45 HH 25.46";
输出:字符串 texString="23445 2546";
所需输出:
String texString="23445 25.46";
enter code here
解决方案
您可以使用此正则表达式进行匹配:
\b\d[\d.]*\b(?:\h(?!\h*\d))?
正则表达式解释:
\b
: 字边界\d
: 匹配 1 个数字[\d.]*
: 匹配 0 个或多个数字或点\b
: 字边界(?:
:启动可选的非捕获组\h
: 匹配一个水平空格(?!\h*\d)
: 否定前瞻断言我们在匹配 0 个或更多空格后没有前面的数字
)?
:结束可选的非捕获组
代码:
String textString = "Value for CH2 234 45 HH 25.46";
final String re = "\\b\\d[\\d.]*\\b(?:\\h(?!\\h*\\d))?";
StringBuilder sb = new StringBuilder();
Matcher matcher = Pattern.compile(re).matcher(textString);
while (matcher.find()) {
sb.append(matcher.group());
}
System.out.println(sb.toString());
输出:
23445 25.46
使用 Java 9+.results()
方法的 Java 代码:
final String re = "\\b\\d[\\d.]*\\b(?:\\h(?!\\h*\\d))?";
String out = Pattern.compile(re)
.matcher(textString)
.results()
.map(MatchResult::group)
.collect(Collectors.joining());
System.out.println(out);
推荐阅读
- mysql - MySQL:使用事务处理嵌套存储过程中的回滚
- python - 如何从 python 漂亮地打印或格式化堆栈跟踪?
- spring-integration - Spring Integration - 使用 XmlValidatingMessageSelector DSL 在过滤器中添加信息
- spotfire - 书签让用户在错误的页面下线
- javascript - onClick 不适用于我的按钮
- arrays - Vue.js 无法将数组复制到另一个数组
- vuetify.js - v-flex 元素中的 Vuetify 垂直居中
- android - Websocket 根据操作系统给出各种数字
- javascript - 对于创建一个 div 的跨度循环
- python - Keras:方法 on_batch_end() 很慢,但我没有回调?