首页 > 解决方案 > 如何使用枢轴数字将字符串一分为二?

问题描述

我正在尝试使用正则表达式将字符串分成两部分,但显然,正则表达式是贪婪的,所以在第一组中它增加了一点。

字符串示例:“这是一个短语 22ext”

期望的结果:

我正在使用以下正则表达式(在 java 中):

[^0-9]*([0-9]+).*

它适用于第 1 组,但在第 0 组中,它也包括“22ext”。

我怎样才能避免它?

标签: javaregex

解决方案


您的正则表达式没有提供所需的输出,因为您没有将它的第一部分添加到组中,因此您的正则表达式 1中只有一个组。您可以使用以下方法解决此问题:

([^0-9]*)([0-9]+).*

然后你可以在“Group 1”和“Group 2”中找到你的两个字符串。请注意,“Group 0”是完全匹配的。

这是一个演示

更好更短的方法是使用以下正则表达式:

(\D*)(\d+)

它匹配第一组中的任何非数字字符(直到它到达第一个数字字符),然后匹配即将到来的数字字符,包括第二组中的所有 Unicode 数字

您可以决定是否.*在末尾包含 。

在线尝试


参考:


1 “Group 0”是整个模式的完全匹配,所以需要使用“Group 1”和“Group 2”。


推荐阅读