java - 如何使用枢轴数字将字符串一分为二?
问题描述
我正在尝试使用正则表达式将字符串分成两部分,但显然,正则表达式是贪婪的,所以在第一组中它增加了一点。
字符串示例:“这是一个短语 22ext”
期望的结果:
第 0 组 = “这是一个短语”
第 1 组 = “22”
“ex”t 被丢弃。
我正在使用以下正则表达式(在 java 中):
[^0-9]*([0-9]+).*
它适用于第 1 组,但在第 0 组中,它也包括“22ext”。
我怎样才能避免它?
解决方案
您的正则表达式没有提供所需的输出,因为您没有将它的第一部分添加到组中,因此您的正则表达式 1中只有一个组。您可以使用以下方法解决此问题:
([^0-9]*)([0-9]+).*
然后你可以在“Group 1”和“Group 2”中找到你的两个字符串。请注意,“Group 0”是完全匹配的。
更好更短的方法是使用以下正则表达式:
(\D*)(\d+)
它匹配第一组中的任何非数字字符(直到它到达第一个数字字符),然后匹配即将到来的数字字符,包括第二组中的所有 Unicode 数字。
您可以决定是否.*
在末尾包含 。
在线尝试。
参考:
1 “Group 0”是整个模式的完全匹配,所以需要使用“Group 1”和“Group 2”。
推荐阅读
- c# - 尝试将文件保存到 DbContext 时引发 ObjectDisposedException
- r - 使用位置作为时间函数创建许多线图
- python - Subplot a histogram corresponding to the plot of a Basemap Python
- scala - org.apache.spark.sql.AnalysisException:无法解析给定输入列的“AB”:无法解析 spark sql 查询中的变量
- mysql - 当连接子句包含条件时,外部连接行为异常
- html - HTML 按钮样式不正确
- haskell - 计算列表中每个元素的所有出现次数
- android - 无法从命令行执行 sdk manager 命令:Android
- sql - 在 sql 中使用 group by over id 对重叠值或日期进行求和/计数
- google-chrome - Overscroll Navigation Flag not working on Chome command line