Java学习笔记6 正则表达式

正则表达式

是一种对字符串进行匹配、检索、和替换的一种规则
正则匹配数据的效果非常高、可读性很差

精确匹配

  • xyz : 匹配字符串中的 xyz

元字符匹配

  • [xyz] : 匹配 x, y, z 中的任意一个字母

  • [a-z] : 匹配 a 到 z 之间的任意一个字母

  • [0-9] : 匹配 0 ~ 9 之间的任意一个数字

  • [.] 或者 . : 匹配一个 小数点

  • [^0-9] : 匹配非数字

  • \d : 匹配一个数字、等价于 [0-9]

  • \D : 匹配一个非数字、等价于 [^0-9]

  • \w : 匹配 字母、数字、下划线、等价于 [a-zA-Z0-9_]

  • \W : 对 \w 取反

  • [\D\d] : 匹配所有的任意一个字符

  • \s : 匹配空白字符(空格、制表符、换行符)

  • \S : 对 \s 取反

  • . : 匹配除换行符之外的任意一个字符

多字符匹配

  • X{n} : 匹配 n 个 X 匹配的内容
  • X{n,} : 匹配至少 n个 X 匹配的内容
  • X{n,m} : 匹配 n ~ m 个 X 匹配的内容, n <= m

X代表元字符匹配规则

贪婪式表达式

  • X* : 匹配 0 ~ N 个 X 匹配的内容, 等价于 {0,}
  • X+ : 匹配 1 ~ N 个 X 匹配的内容, 等价于 {1,}
  • X? : 匹配 0 ~ 1 个 X 匹配的内容, 等价于 {0,1}

非贪婪式表达式

在贪婪式表达式的后面,添加一个 ? 就变成了 非贪婪式表达式

  • X*? : 匹配 0 ~ N 个 X 匹配的内容
  • X+? : 匹配 1 ~ N 个 X 匹配的内容
  • X?? : 匹配 0 ~ 1 个 X 匹配的内容

非贪婪式表达式,一般需要和后面的表达式配合完成匹配
非贪婪式表达式 一般不会出现在正则的尾部

分组(regex)

对正则表达式使用小括号进行分组
作用 是用来将整个正则表达式匹配的内容中 具有价值或者关注的数据 进行单独分组标记、以便后续的数据提取
分组的顺序: 以左括号为主来标记组的顺序

命名捕获分组 (?<name>regex)

给组设置一个名称、方便程序根据名字获取组匹配的内容
?<name> : 给组设置一个名称
不可的语言对他语法可能会不一样,例如 Python的语法式 (?P<name>regex)

非捕获分组 (?:regex)

当使用 小括号的时候,正则表达式会产生分组效果,如果此时不希望小括号作为一个组,那么可以在括号里添加 ?:

引用分组 \n

n 代表 组的编号
通过 引用某一个组匹配的内容,来进行匹配
常用来解决对称匹配问题

选择 |

对一个整体进行 或运算

限定符

一般用来做数据校验,用来校验字符串是否匹配内容

  • ^ : 以 … 开头, 位置写在正则表达式所有匹配规则的前面
  • $ : 以 … 结尾, 位置写在正则表达式所有匹配规则的后面

断言

  • 反向确定断言 (?<=)

  • 反向否定断言 (?<!)

  • 正向确定断言 (?=)

  • 正向否定断言 (?!)

Java中使用正则表达式

  • 在 Java 语言中,正则表达式使用 字符串 的形式 来表示
  • 表示正则表达式的类是 java.util.regex.Pattern 类

将字符串格式的正则表达式转成Pattern对象


Pattern p = Pattern.compile(regex) ; 

Matcher  m  = p.matcher(str) 

m.matches() :  会自动在正则前后加上限定符^$, 用来匹配整个字符串,一般用来做数据校验 

m.find() : 会根据正则表达式,从字符串中查找匹配的内容,如果找到,返回 true 

m.group() : 会提取正则表达式 匹配的内容,但该方法在使用前 必须先调用 m.find() 

matches()

会自动在正则前后加上限定符^$, 用来匹配整个字符串,一般用来做数据校验

find() + group()

会根据正则表达式,从字符串中查找匹配的内容,并获取匹配的容器

group(n)

n 如果是数字,则代表 提取 正则第 n 组 匹配的内容, 如果是 0, 代表获取正则匹配的内容

n 如果是字符串,则代表 命名捕获分组中定义的 组名

字符串替换

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(s);
StringBuilder sb = new StringBuilder();

while (matcher.find()) {
    matcher.appendReplacement(sb, 'xxxxx');
}
matcher.appendTail(sb);

其他方法

Pattern.matches(regex, str) : 校验字符串是否满足条件

字符串中支持正则表达式的方法

  • replaceAll(regex, newstr) : 将 regex匹配的内容全部替换成 newstr

  • replaceFirst(regex, newstr) : 将 regex第一次匹配的内容替换成 newstr

  • split(regex) : 按照正则表达式匹配的内容拆分字符串

  • split(regex, limit) : 按照正则表达式匹配的内容拆分字符串,拆分为limit长度的数组

    • limit 为 0,则代表 全部拆分
  • matches(regex) : 验证字符串

正则修饰符

  • S模式

在 dotAll 模式下, . 匹配任意一个字符

  • I 模式:

在正则表达式匹配内容的时候,忽略大小写

  • M 模式

M模式要配合限定符才能使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python学习笔记|字符串与正则表达式练习题答案 1. 练习题1: 题目:给定一个字符串s,找出其中的连续的最长的数字串。 答案:可以通过正则表达式来匹配数字串,然后使用max函数找出最长的。 代码示例: import re def find_longest_num_str(s): num_str_list = re.findall('\d+', s) longest_str = max(num_str_list, key=len) return longest_str s = "ab1234c56789def" print(find_longest_num_str(s)) 输出:56789 2. 练习题2: 题目:给定一个字符串s,将其中的每个空格替换为"%20"。 答案:可以通过正则表达式的sub函数来实现替换。 代码示例: import re def replace_space(s): new_s = re.sub(' ', '%20', s) return new_s s = "Hello World" print(replace_space(s)) 输出:Hello%20World 3. 练习题3: 题目:给定一个字符串s,判断它是否为回文字符串。 答案:可以使用切片操作将字符串反,然后与原字符串进行比较。 代码示例: def is_palindrome(s): return s == s[::-1] s = "abcba" print(is_palindrome(s)) 输出:True ### 回答2: 以下是关于字符串和正则表达式练习题的答案: 1. 给定一个字符串s,编写一个函数,返回该字符串的反字符串。 def reverse_string(s): return s[::-1] 2. 给定一个字符串s,编写一个函数,返回是否是回文字符串。 def is_palindrome(s): return s == s[::-1] 3. 给定一个字符串s和一个字符c,编写一个函数,返回字符串s中字符c的出现次数。 def count_char(s, c): return s.count(c) 4. 给定一个字符串s,编写一个函数,返回字符串s中的所有单词列表。 def split_words(s): return s.split() 5. 给定一个字符串s,编写一个函数,返回字符串s中的所有数字列表。 import re def extract_numbers(s): return re.findall(r'\d+', s) 这只是一些可能的答案,其中的解决方法可以有很多种。每个问题都有不同的解决方案,具体取决于个人的编程风格和需求。希望这些答案能够帮助你理解和学习Python中的字符串和正则表达式

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值