特殊字符转义
以下字符都需要用 反斜线(\)来进行特殊字符的转义。
\n - 换行符
\t - 制表符
\ - 反斜线本身
. - 点号(任意单个字符)
星号(0次或多次重复前面的元素)
加号(1次或多次重复前面的元素)
? - 问号(零次或一次重复前面的元素)
[] - 方括号内的任何字符集合
() - 分组操作符
{} - 花括号内指定数量的重复次数
起因,python正则匹配,从'你好aaa+'匹配‘aaa+’,我就想完整的匹配aaa+,但是实际效果是'你好a'这种的也能匹配上。
debug发现原来+在正则中是特殊字符。如果要匹配 +
字符本身,你需要使用反斜杠 \
对它进行转义。即遇见 + 的pattern用 /+ 来替换,
modified_string = original_string.replace("+", "/+")
‘aaa+’被解释为:匹配前面的字符 'aaa'
一次或多次。
import rere.search('aaa+', 'a') # nonere.search('aaa+', 'aaab') # <_sre.SRE_Match object; span=(0, 3), match='aaa'>re.search('aaa+', 'ab') # nonere.search('aaa+', 'aab') # nonere.search('aaa+', 'aaaaaab') # <_sre.SRE_Match object; span=(0, 6), match='aaaaaa'>
re.match() 与 re.search() 的区别
1. `re.match()`:
- `re.match()` 用于从字符串的起始位置开始匹配正则表达式。
- 如果匹配成功,`re.match()` 返回一个匹配对象;如果匹配失败,它返回 `None`。
- 它只匹配字符串的第一个子串,也就是说,它不会扫描整个字符串,而是在找到第一个匹配项后停止。
2. `re.search()`:
- `re.search()` 用于在字符串中扫描正则表达式,并返回第一个匹配项。
- 如果匹配成功,`re.search()` 返回一个匹配对象;如果匹配失败,它返回 `None`。
- 它会扫描整个字符串,直到找到第一个匹配项为止。
简而言之,`re.match()` 通常用于检查字符串的起始部分是否与正则表达式匹配,而 `re.search()` 用于在整个字符串中查找匹配项。下面是一个示例,展示这两个函数的区别:
总结:search()更符合需求。
import re# 示例字符串
text = "这是一个测试字符串,包含多个部分。"# 正则表达式
pattern1 = r'测试'
pattern2 = r'多个部分'# 使用re.match()
match1 = re.match(pattern1, text)
match2 = re.match(pattern2, text)print(f"match1: {match1}") # match1: None
print(f"match2: {match2}") # match2: None# 使用re.search()
search1 = re.search(pattern1, text)
search2 = re.search(pattern2, text)print(f"search1: {search1}") # search1: <_sre.SRE_Match object; span=(4, 6), match='测试'>
print(f"search2: {search2}") # search2: <_sre.SRE_Match object; span=(12, 16), match='多个部分'>
re.findall()
matches = re.findall(pattern, str)
re.sub()
# 将str中匹配到的pattern部分替换为''new_str = re.sub(pattern, '', str)
实践1:匹配12g
pattern = r"\d+\s*[Gg][Bb]?" # 256g, 12g
实践2:匹配12g+12g, 12gb+12gb, 12g+1
pattern = r"\d+\s*[g]?[b]?\+\d+\s*[Gg]?[Bb]?"