首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在字符串中查找整数的正则表达式

在字符串中查找整数的正则表达式
EN

Stack Overflow用户
提问于 2008-12-16 18:05:48
回答 5查看 75K关注 0票数 21

我想在Java中使用正则表达式。

我想要做的是找到字符串中的第一个整数。

示例:

String = "the 14 dogs ate 12 bones"

将返回14。

String = "djakld;asjl14ajdka;sdj"

也会返回14。

这就是我到目前为止所拥有的。

Pattern intsOnly = Pattern.compile("\\d*");
Matcher makeMatch = intsOnly.matcher("dadsad14 dssaf jfdkasl;fj");
makeMatch.find();
String inputInt = makeMatch.group();
System.out.println(inputInt);

我做错了什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-12-16 18:08:24

您要求的位数为0或更多。您需要要求1个或更多:

"\\d+"
票数 52
EN

Stack Overflow用户

发布于 2009-10-23 04:08:15

这是我用泛型为C#做的一个方便的例子。它将根据您的正则表达式进行匹配,并返回您需要的类型:

public T[] GetMatches<T>(string Input, string MatchPattern) where T : IConvertible
    {
        List<T> MatchedValues = new List<T>();
        Regex MatchInt = new Regex(MatchPattern);

        MatchCollection Matches = MatchInt.Matches(Input);
        foreach (Match m in Matches)
            MatchedValues.Add((T)Convert.ChangeType(m.Value, typeof(T)));

        return MatchedValues.ToArray<T>();
    }

然后,如果您只想获取数字并在string[]数组中返回它们:

string Test = "22$data44abc";
string[] Matches = this.GetMatches<string>(Test, "\\d+");

希望这对某些人有用...

票数 0
EN

Stack Overflow用户

发布于 2012-12-21 03:11:17

除了PiPeep所说的,如果您试图匹配表达式中的整数,以便1 + 2 - 3只匹配123,而不是1+ 2- 3,那么您实际上需要使用lookbehind语句,并且您想要的部分实际上将由Matcher.group(2)返回,而不仅仅是Matcher.group()

unescaped: ([0-9])?((?(1)(?:[\+-]?\d+)|)(?:[eE][\+-]?\d+)?)
  escaped: ([0-9])?((?(1)(?:[\\+-]?\\d+)|)(?:[eE][\\+-]?\\d+)?)

此外,对于像someNumber - 3这样的东西,您可以使用

unescaped: (\w)?((?(1)(?:[\+-]?\d+)|)(?:[eE][\+-]?\d+)?)
  escaped: (\\w)?((?(1)(?:[\\+-]?\\d+)|)(?:[eE][\\+-]?\\d+)?)

当然,如果您正在解析像The net change to blahblah was +4这样的字符串,那么这是不起作用的

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

https://stackoverflow.com/questions/372148

复制
相关文章

相似问题

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