正则表达式常用方法

package demo.api;

import org.junit.Test;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

//JavaSE文档  Pattern类
public class 正则表达式 {
    //匹配演示
    @Test
    public void matching() {
        String regex = "ao?b";
        System.out.println(regex + ": o出现零次或一次: " + "aob".matches(regex));
        regex = "ao*b";
        System.out.println(regex + ": o出现零次或多次: " + "aob".matches(regex));
        regex = "ao+b";
        System.out.println(regex + ": o出现一次或多次: " + "ab".matches(regex));
        regex = "ao{2}b";
        System.out.println(regex + ": o出现两次: " + "aoob".matches(regex));
        regex = "ao{2,}b";
        System.out.println(regex + ": o出现至少 2 次: " + "aoob".matches(regex));
        regex = "ao{2,5}b";
        System.out.println(regex + ": o出现至少 2 次,但是不超过 5 次: " + "aooooob".matches(regex));
    }

    //匹配手机号和QQ号
    @Test
    public void matchingPhoneNumber() {
        String phoneNumber = "13027572303";
        System.out.println(phoneNumber.length());
        String regex = "1[358]\\d{9}";//1[358][0-9]{9}  //第一位1,第二位3或5或8,后面9位为数字
        System.out.println("手机号:" + phoneNumber + " 是否成功:" + phoneNumber.matches(regex));

        String qq = "1234543";//长度5~15. 只能是数字, 0不能开头
        regex = "[1-9]\\d{4,14}";
        System.out.println("匹配QQ号:" + qq + ": " + qq.matches(regex));
    }

    //切割字符串
    @Test
    public void splitString() {
        String str = "a b  z adw  zxcx      z  ";
        String[] strArr = str.split(" +");//切割一个或多个空格
        System.out.println("切割一个或多个空格:");
        for (String s : strArr) {
            System.out.println(s);
        }

        str = "a.b.sfe.sf";
        strArr = str.split("\\.");//转义.
        System.out.println("切割.:");
        for (String s : strArr) {
            System.out.println(s);
        }

        str = "a###b@@cttttd";
        //组   第一组内容是一个任意字符  切割含有多个第一组内容的字符串   也就是切割含有多个相同任意字符的字符串
        strArr = str.split("(.)\\1+");
        System.out.println("切割多个相同字符:");
        for (String s : strArr) {
            System.out.println(s);
        }

    }

    //替换字符串
    @Test
    public void replaceString() {
        String str = "a##bttttc";
        str = str.replaceAll("(.)\\1+", "@");
        System.out.println("替换重复字符串为@: " + str);

        str = "a##bttttc";
        str = str.replaceAll("(.)\\1+", "$1");//$1使用正则中的第一组
        System.out.println("替换重复字符串为单个字符: " + str);

        str = "13027572303";
        str = str.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");//第一组第二组照搬,中间替换
        System.out.println("隐藏手机号:" + str);
    }

    //获取字符串
    @Test
    public void getString() {
        String str = "da jia hao, ming tan fang jia!";
        String regex = "\\b[a-z]{3}\\b";//查找三个字符的字符串,\b字母边界
        //1,将正则封装成对象。
        Pattern p = Pattern.compile(regex);
        //2, 通过正则对象获取匹配器对象。
        Matcher m = p.matcher(str);
        //使用Matcher对象的方法对字符串进行操作。
        while (m.find()) {
            System.out.println(m.group());//获取匹配的子序列
            System.out.println("子序列位置:[" + m.start() + "," + m.end() + ")");
        }
    }
}

### Python 正则表达式的常见用法 #### 创建正则表达式对象 为了高效地重复使用同一个模式,在实际编程中通常会先编译正则表达式。这可以通过 `re.compile` 方法完成,该函数接受一个模式字符串并返回一个正则表达式对象[^2]。 ```python import re pattern = r'\d+' # 定义匹配数字的简单模式 regex = re.compile(pattern) ``` #### 查找所有匹配项 当需要找到输入字符串中的所有匹配子串时,可以调用正则表达式对象上的 `findall()` 方法来获取列表形式的结果: ```python text = "There are 123 apples and 456 oranges." matches = regex.findall(text) print(matches) # 输出 ['123', '456'] ``` #### 替换匹配的内容 对于想要修改原始文本的需求来说,`sub()` 方法允许指定一个新的字符串去替代那些符合条件的部分: ```python new_text = regex.sub('NUM', text) print(new_text) # 输出 There are NUM apples and NUM oranges. ``` #### 判断是否完全匹配整个字符串 如果希望验证某个字符串能否被给定模式完整无误地表示,则应该考虑使用 `fullmatch()` 方法来进行测试: ```python test_string = "789" is_full_match = bool(regex.fullmatch(test_string)) print(is_full_match) # 输出 True 或 False 取决于 test_string 是否只包含连续的数字字符 ``` #### 执行一次搜索操作 有时只需要知道是否存在至少一处满足条件的地方而不关心具体位置的话,那么就可以利用 `search()` 来实现这样的目的;此方法会在第一次遇到成功匹配之后立即停止继续寻找其他可能存在的实例,并返回相应的 Match 对象或者 None 表示失败: ```python another_test = "abc12defg" result = regex.search(another_test) if result: print(f"Found a match at position {result.start()}: '{result.group(0)}'") else: print("No matches found.") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值