首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Java中使用正则表达式提取值

在Java中使用正则表达式提取值
EN

Stack Overflow用户
提问于 2008-10-25 21:42:24
回答 12查看 349K关注 0票数 193

我有几个粗略形式的字符串:

代码语言:javascript
复制
[some text] [some number] [some more text]

我想使用Java Regex类提取一些数字形式的文本。

我大致知道我想要使用什么正则表达式(尽管欢迎所有建议)。我真正感兴趣的是Java调用,以获取正则表达式字符串,并在源数据上使用它来生成某个数字的值。

编辑:我应该补充说,我只对单个some number感兴趣。源字符串很短,我不会去寻找某个数字的多次出现。

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2008-10-25 21:47:26

完整示例:

代码语言:javascript
复制
private static final Pattern p = Pattern.compile("^([a-zA-Z]+)([0-9]+)(.*)");
public static void main(String[] args) {
    // create matcher for pattern p and given string
    Matcher m = p.matcher("Testing123Testing");

    // if an occurrence if a pattern was found in a given string...
    if (m.find()) {
        // ...then you can use group() methods.
        System.out.println(m.group(0)); // whole matched expression
        System.out.println(m.group(1)); // first expression from round brackets (Testing)
        System.out.println(m.group(2)); // second one (123)
        System.out.println(m.group(3)); // third one (Testing)
    }
}

由于您正在寻找第一个数字,因此可以使用下面的regexp:

代码语言:javascript
复制
^\D+(\d+).*

m.group(1)会给你返回第一个数字。请注意,有符号数字可以包含减号:

代码语言:javascript
复制
^\D+(-?\d+).*
票数 348
EN

Stack Overflow用户

发布于 2011-11-14 09:06:43

代码语言:javascript
复制
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Regex1 {
    public static void main(String[]args) {
        Pattern p = Pattern.compile("\\d+");
        Matcher m = p.matcher("hello1234goodboy789very2345");
        while(m.find()) {
            System.out.println(m.group());
        }
    }
}

输出:

代码语言:javascript
复制
1234
789
2345
票数 49
EN

Stack Overflow用户

发布于 2012-02-20 08:08:45

除了Pattern之外,Java String类还有几个可以处理正则表达式的方法,在您的例子中,代码如下:

代码语言:javascript
复制
"ab123abc".replaceFirst("\\D*(\\d*).*", "$1")

其中\\D是非数字字符。

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

https://stackoverflow.com/questions/237061

复制
相关文章

相似问题

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