首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获得带空格的整数和连字符的正则表达式(特殊模式识别)

获得带空格的整数和连字符的正则表达式(特殊模式识别)
EN

Stack Overflow用户
提问于 2022-07-18 08:43:57
回答 1查看 69关注 0票数 2

下面是我想要捕获的(10-12) <=====这种格式的数据

样本数据:

代码语言:javascript
运行
复制
sdfdsfsdffsd 16.50sd - 57676766.0sd
16.50sd - 57676766.0sd
16.50sd - 57676766.0sd
sdfsdffsdf 6sd - 5.989898989sd sdfsdsdf
sdfdsf 6.50sd - 76.50sd sdfsdfsd
sdfsf sd 12sd - 15sd sdfdsdffsdff
16.50sd - 57sd
16sd - 50sd
1.50sd - 5.0sd
1sd - 5766.34sd the sdfdsfdsf spesdfdsfed
1sd - 5766.34sd the ssdfsdf  sdfsdf

这是我到目前为止所拥有的正则表达式

代码语言:javascript
运行
复制
[^\w\.\n]((\s?\-?\s?)(\d*(?=\.)))

结果如下:链接这里https://regex101.com/r/KNvHn8/1

所以

  1. 所需格式(16-55)
  2. 样本数据blah 16.50-55.30blah我需要小数点之前的整数(16) (-) (55)

我可以用2正则表达式实现这一点,但更好的需要一个。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-18 09:29:23

如果您只想要在点之前的第一个数字,并且中间必须有一个连字符,则可以使用两个捕获组:

代码语言:javascript
运行
复制
(\d+)(?:\.\d+)?[^\s\d-]*(\s-\s)[^\d-]*(\d+)

解释

  • (\d+)捕获第2组中的1+数字
  • (?:\.\d+)?可选择匹配.和1+数字
  • [^\s\d-]*可选择匹配除空白字符、数字或-
  • (\s-\s)捕获第2组空白字符之间的-
  • [^\d-]*可选择匹配除-或数字以外的任何字符。
  • (\d+)捕获第3组中的1+数字

regex演示

如果要在一行上显示结果,可以使用以下三个组替换:

代码语言:javascript
运行
复制
^\D*(\d+)(?:\.\d+)?[^\s\d-]*(\s-\s)[^\d-]*(\d+).*

示例

代码语言:javascript
运行
复制
String regex = "^\\D*(\\d+)(?:\\.\\d+)?[^\\s\\d-]*(\\s-\\s)[^\\d-]*(\\d+).*";
String string = "sdfdsfsdffsd 16.50sd - 57676766.0sd\n"
+ "16.50sd - 57676766.0sd\n"
+ "16.50sd - 57676766.0sd\n"
+ "sdfsdffsdf 6sd - 5.989898989sd sdfsdsdf\n"
+ "sdfdsf 6.50sd - 76.50sd sdfsdfsd\n"
+ "sdfsf sd 12sd - 15sd sdfdsdffsdff\n"
+ "16.50sd - 57sd\n"
+ "16sd - 50sd\n"
+ "1.50sd - 5.0sd\n"
+ "1sd - 5766.34sd the sdfdsfdsf spesdfdsfed\n"
+ "1sd - 5766.34sd the ssdfsdf  sdfsdf";
String subst = "$1$2$3";

Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
Matcher matcher = pattern.matcher(string);

System.out.println( matcher.replaceAll("$1$2$3"));

输出

代码语言:javascript
运行
复制
16 - 57676766
16 - 57676766
16 - 57676766
6 - 5
6 - 76
12 - 15
16 - 57
16 - 50
1 - 5
1 - 5766
1 - 5766

Java演示

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73019548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档