正则表达式的基本用法

1、掌握正则表达式的基本用法,常用的方法的使用

2、 match 方法和 search 方法的区别?

3、 如何理解贪婪模式和非贪婪模式

正则表达式,又称规则表达式,通常被用来检索、替换那些符合某个模式(规则)的文本

在这里插入图片描述

单字符匹配,多字符匹配,匹配分组,
对文本进行匹配查找的一系列方法
 match 方法:从起始位置开始查找,一次匹配
 search 方法:从任何位置开始查找,一次匹配
 findall 方法:全部匹配,返回列表
 finditer 方法:全部匹配,返回迭代器
 split 方法:分割字符串,返回列表
 sub 方法:替换
re 基本用法(选)
Python re 模块导入:
import re
单字符匹配
.匹配任意字符(除了\n)
[]匹配列丼的字符
\d 匹配数字
\w 匹配单词字符
范例

.匹配任意字符(除了\n)

ret = re.match(".",“abc”)
print(ret.group())

Pattern 对象

提供了对文本进行匹配查找的一系列方法
 match 方法:从起始位置开始查找,一次匹配
 search 方法:从任何位置开始查找,一次匹配
 findall 方法:全部匹配,返回列表
 finditer 方法:全部匹配,返回迭代器
 split 方法:分割字符串,返回列表
 sub 方法:替换

match 方法

字符串的头部戒者指定位置开始查找一次匹配,只要找到了一个匹配的结果就返回
match(string[,pos[,endpos]])
string 是待匹配的字符串
pos 和endpos 可选参数,指定字符串的起始和终点位置默认值分别是 0和len(字符串长度)
当匹配成功时,返回一个 Match 对象,如果没有匹配上,则返回 None。
示例
import re
pattern = re.compile(r’\d+’) # 用于匹配至少一个数字
m = pattern.match(‘one12twothree34four’) # 查找头部,没有匹配
print(m)
m = pattern.match(‘one12twothree34four’, 2, 10) # 从’e’的位置开始匹配,没有
匹配
print(m)
示例2
m = pattern.match(‘one12twothree34four’, 3, 10) # 从’1’的位置开始匹配,正好
匹配
print(m) # 返回一个 Match 对象
print(m.group(0)) # 可省略 0
print(m.start(0)) # 可省略 0
print(m.end(0)) # 可省略 0
print(m.span(0)) # 可省略 0

Match 对象

group([group1, …])获得一个戒多个分组匹配的字符串
group() 戒 group(0) 获得整个匹配的子串
start([group]) 获取分组匹配的子串在整个字符串中的起始位置(子串第一个字符的索引)
end([group]) /获取分组匹配的子串在整个字符串中的结束位置(子串最后一个字符的索引
+1)
span([group]) 方法返回 (start(group), end(group))。

## 范例
import re
pattern = re.compile(r’([a-z]+) ([a-z]+)’, re.I) # re.I 表示忽略大小写
m = pattern.match(‘Hello World Wide Web’)
print(m) # 匹配成功,返回一个 Match 对象
print(m.group(0)) # 返回匹配成功的整个子串
print(m.span(0)) # 返回匹配成功的整个子串的索引
print(m.group(1)) # 返回第一个分组匹配成功的子串
print(m.span(1)) # 返回第一个分组匹配成功的子串的索引
print(m.group(2)) # 返回第二个分组匹配成功的子串
print(m.span(2)) # 返回第二个分组匹配成功的子串
print(m.groups()) # 等价于 (m.group(1), m.group(2), …)
print(m.group(3)) # 不存在第三个分组 IndexError: no such group

search 方法

查找字符串的任何位置, 只匹配一次,只要找到了一个匹配的结果就返回
search(string[, pos[, endpos]])
string 是待匹配的字符串
pos 和 endpos 可选参数,指定字符串的起始和终点位置
当匹配成功时,返回一个 Match 对象,如果没有匹配上,则返回 None。

范例

import re
pattern = re.compile(’\d+’)
m = pattern.search(‘one12twothree34four’) # 这里如果使用 match 方法则不匹配
print(m.group())
m = pattern.search(‘one12twothree34four’, 10, 30) # 指定字符串区间
print(m.group())
print(m.span())

贪婪模式与非贪婪模式

贪婪模式:在整个表达式匹配成功的前提下,尽可能多的匹配 ( * );
非贪婪模式:在整个表达式匹配成功的前提下,尽可能少的匹配 ( ? );
Python 里数量词默认是贪婪的。
示例一
import re
str = ‘abbbc’

贪婪模式

pattern = re.compile(r’ab*’) # * 决定了尽可能多匹配 b,结果是 abbb
result = pattern.match(str)
print(result.group())

非贪婪模式

pattern = re.compile(r’ab*?’) # *? 决定了尽可能少匹配 b,结果是 a
result = pattern.match(str)
print(result.group())
pattern = re.compile(r’ab+?’) # *? 决定了尽可能少匹配 b,结果是 ab
result = pattern.match(str)
print(result.group())

示例二
import re

贪婪模式

str = “aa

test1
bb
test2
cc”
pattern = re.compile(r’
.
’) # 决 定 了 尽 可 能 多 匹 配 b, 结 果 是

test1
bb
test2
result = pattern.search(str) print(result.group()) # 非贪婪模式 str = "aa
test1
bb
test2
cc" pattern = re.compile(r'
.*?
') # *? 决定了尽可能少匹配 b,结果是
test1
result = pattern.search(str) print(result.group())
JavaScript正则表达式和Java正则表达式在语法上有一些差异,但是它们的基本概念和用法是相似的。下面是将JavaScript正则表达式转换为Java正则表达式的一些常见规则: 1. 语法差异: - JavaScript正则表达式使用斜杠(/)作为定界符,而Java正则表达式使用双引号(")作为定界符。 - JavaScript正则表达式中的特殊字符需要进行转义,而Java正则表达式中的特殊字符不需要转义。 2. 字符类: - JavaScript正则表达式中的字符类使用方括号([])表示,而Java正则表达式使用方括号([])或者Unicode转义(\p{...})表示。 - JavaScript正则表达式中的字符类可以使用连字符(-)表示范围,而Java正则表达式中需要使用Unicode转义(\uXXXX)表示范围。 3. 量词: - JavaScript正则表达式中的量词使用花括号({})表示,而Java正则表达式使用花括号({})或者问号(?)表示。 - JavaScript正则表达式中的贪婪量词默认是贪婪模式,而Java正则表达式中的贪婪量词需要在后面添加问号(?)来表示非贪婪模式。 4. 边界匹配: - JavaScript正则表达式中的边界匹配使用插入符号(^)和美元符号($)表示,而Java正则表达式使用\A和\Z表示。 5. 其他差异: - JavaScript正则表达式中的捕获组使用圆括号(())表示,而Java正则表达式使用圆括号(())或者方括号([])表示。 - JavaScript正则表达式中的反向引用使用反斜杠加数字(\1、\2等)表示,而Java正则表达式使用美元符号加数字($1、$2等)表示。 以上是一些常见的JavaScript正则表达式转换为Java正则表达式的规则。具体转换时,还需要根据具体的正则表达式进行适当的调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值