我试图使用正则表达式将字符串分成两部分,但显然,正则表达式是贪婪的,因此在第一组中它会增加一点点。
字符串示例:"这是一个短语22ext"
期望的结果:
第0组="这是一个短语"
第1组=" 22"
" ex" t废弃。
我使用以下Regex(在java中):
[^0-9]*([0-9]+).*
适用于第1组,但在第0组中,它包含" 22ext"同样。
我该如何避免呢?
答案 0 :(得分:2)
你的正则表达式没有提供所需的输出,因为你没有在组中添加它的第一部分,所以你的正则表达式只有一个组 1 。您可以使用以下方法解决此问题:
([^0-9]*)([0-9]+).*
然后你可以在"第1组"中找到你的两个字符串。和"第2组"。请注意"Group 0" is the full match。
更好更短的方法是使用以下正则表达式:
(\D*)(\d+)
哪个匹配第一个组中的任何非数字字符(直到它到达第一个数字字符)然后它匹配即将出现的数字字符,包括所有Unicode数字 in第二组。
您可以决定是否在最后加入.*
。
1 "第0组"是整个模式的完全匹配,因此您需要使用" Group 1"和"第2组"。