Bootstrap

java正则表达式提取字符串中指定的数据

一. 什么是正则表达式?

正则表达式是一种用来描述、匹配和操作字符串的强大工具。它可以用于验证输入的字符串、提取特定格式的字符串、替换字符串中的特定部分等操作。

String 类里也提供了如下几个特殊的方法。

//判断该字符串是否匹配指定的正则表达式。
boolean matches(String regex)

//将该字符串中所有匹配 regex 的子串替换成replacement。 
String replaceAll(String regex, String replacement)

//将该字符串中第一个匹配 regex 的子串替换成 replacement。
String replaceFirst(String regex, String replacement)

//以 regex 作为分隔符,把该字符串分割成多个子串。
String[] split(String regex)

二. 测试案例

2.1 提取数字(包含小数)

package com.example.demo.aaa;

import java.util.regex.*;
 
public class RegexDemo {
    public static void main(String[] args) {
        String input = "这是一个包含数字的字符串,比如123和4.56等等";
        String pattern = "\\d+(\\.\\d+)?";
 
        Pattern p = Pattern.compile(pattern);
        Matcher m = p.matcher(input);
 
        while (m.find()) {
            System.err.println("match number:" + m.group());
        }
    }
}

在上面的代码中,使用了正则表达式 \\d+(\\.\\d+)? 来提取字符串中的数字部分。该正则表达式的含义如下:

  • \\d+ 匹配一个或多个数字;
  • (\\.\\d+)? 匹配小数点和小数部分,其中 ? 表示小数部分可选。

输出:

match number:123
match number:4.56

2.2 提取百分号的数(包含小数)

        String input = "这是一个包含百分数的字符串,比如12.34%和56%和0.007%等等。";
        String regex = "(\\d+(\\.\\d+)?%)";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);
        while (matcher.find()) {
            String percentage = matcher.group();
            System.err.println("Percentage: " + percentage);
        }

在上面的代码中,使用了正则表达式 (\\d+(\\.\\d+)?%) 来提取字符串中的百分数部分。该正则表达式的含义如下:

  • \\d+ 匹配一个或多个数字;
  • (\\.\\d+)? 匹配小数点和小数部分,其中 ? 表示小数部分可选;
  • % 表示百分号。

使用 Pattern 类的 compile 方法将正则表达式编译成一个模式,然后使用 Matcher 类的 matcher 方法对输入字符串进行匹配。如果输入字符串中存在匹配的百分数,可以使用 group 方法获取匹配的字符串。

运行上述代码,将输出:

Percentage: 12.34%
Percentage: 56%
Percentage: 0.007%

三. 代码解析:

首先定义了一个输入字符串input和一个正则表达式模式pattern
使用Pattern.compile()方法将正则表达式编译成一个Pattern对象。
使用p.matcher(input)方法创建一个Matcher对象,用于进行匹配。
使用m.find()方法循环查找输入字符串中与正则表达式匹配的部分。
使用m.group()方法获取匹配到的部分。

四. 总结

正则表达式写对,理论上是可以跑出指定的数据的. 
 

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;