一文介绍Python中的正则表达式用法

Halima ·
更新时间:2024-09-20
· 1385 次阅读

目录

1. 正则表达式基础

1.1 什么是正则表达式

1.2 基本匹配规则

1.3 字符类和预定义字符类

1.4 量词和贪婪匹配

1.5 边界匹配

2. 使用re模块

2.1 re模块的导入

2.2 re.match()方法

2.3 re.search()方法

2.4 re.findall()方法

2.5 re.sub()方法

3. 正则表达式的高级用法

3.1 分组和捕获

3.2 非贪婪匹配

3.3 向前界定和向后界定

3.4 反向引用

3.5 零宽断言

4. 实例演示

4.1 邮箱验证

4.2 URL提取

4.3 HTML标签提取

4.4 敏感词过滤

结论

1. 正则表达式基础 1.1 什么是正则表达式

正则表达式是一种用于描述和匹配字符串模式的表达式。它由一系列字符和特殊字符组成,用于在文本中进行搜索和替换操作。

1.2 基本匹配规则

正则表达式中的基本匹配规则包括普通字符的匹配、点号的匹配任意字符、转义字符的使用等。

import re pattern = r"abc" # 匹配字符串 "abc" string = "xyz abc def" result = re.findall(pattern, string) print(result) # Output: ['abc'] 1.3 字符类和预定义字符类

字符类用于匹配指定范围内的字符,预定义字符类则表示常见的字符组合,如数字、字母、空白字符等。

import re pattern = r"[0-9]" # 匹配任意数字字符 string = "abc 123 def" result = re.findall(pattern, string) print(result) # Output: ['1', '2', '3'] 1.4 量词和贪婪匹配

量词用于指定匹配的次数,如匹配0次或多次、匹配1次或多次等。贪婪匹配是指尽可能多地匹配字符,非贪婪匹配则尽可能少地匹配字符。

import re pattern = r"a+" # 匹配一个或多个连续的字符 "a" string = "aaaabbb" result = re.findall(pattern, string) print(result) # Output: ['aaaa'] 1.5 边界匹配

边界匹配用于限定匹配的位置,如行的开头、行的结尾、单词的边界等。

import re pattern = r"\bhello\b" # 匹配整个单词 "hello" string = "hello world" result = re.findall(pattern, string) print(result) # Output: ['hello'] 2. 使用re模块 2.1 re模块的导入

在使用Python进行正则表达式操作之前,我们需要先导入re模块。

import re 2.2 re.match()方法

re.match()方法用于从字符串的开头开始匹配模式,如果匹配成功,则返回一个匹配对象;否则返回None。

import re pattern = r"hello" string = "hello world" result = re.match(pattern, string) if result: print("Match found!") else: print("No match") 2.3 re.search()方法

re.search()方法用于在字符串中搜索匹配模式,如果找到任意位置的匹配,则返回一个匹配对象;否则返回None。

import re pattern = r"world" string = "hello world" result = re.search(pattern, string) if result: print("Match found!") else: print("No match") 2.4 re.findall()方法

re.findall()方法用于在字符串中搜索所有匹配模式的子串,并将它们作为列表返回。

import re pattern = r"\d+" string = "I have 10 apples and 20 oranges." result = re.findall(pattern, string) print(result) # Output: ['10', '20'] 2.5 re.sub()方法

re.sub()方法用于在字符串中搜索匹配模式的子串,并将其替换为指定的字符串。

import re pattern = r"apple" string = "I have an apple." result = re.sub(pattern, "banana", string) print(result) # Output: "I have an banana." 3. 正则表达式的高级用法 3.1 分组和捕获

正则表达式中的分组和捕获允许我们将匹配的子串提取出来,并在后续操作中使用。

import re pattern = r"(\d+)-(\d+)-(\d+)" # 匹配日期格式 "YYYY-MM-DD" string = "Today is 2023-06-28." result = re.search(pattern, string) if result: year = result.group(1) month = result.group(2) day = result.group(3) print(f"Year: {year}, Month: {month}, Day: {day}") else: print("No match") 3.2 非贪婪匹配

非贪婪匹配是指尽可能少地匹配字符,可以通过在量词后加上"?"来实现。

import re pattern = r"a+?" string = "aaaaa" result = re.findall(pattern, string) print(result) # Output: ['a', 'a', 'a', 'a', 'a'] 3.3 向前界定和向后界定

向前界定和向后界定用于限定匹配的前后条件,但不包括在匹配结果中。

import re pattern = r"(?<=@)\w+" # 匹配邮箱地址中的用户名 string = "john@example.com" result = re.findall(pattern, string) print(result) # Output: ['example'] 3.4 反向引用

反向引用用于在正则表达式中引用前面已经匹配的子串。

import re pattern = r"(\w+)\s+\1" # 匹配重复的单词 string = "hello hello world world" result = re.findall(pattern, string) print(result) # Output: ['hello', 'world'] 3.5 零宽断言

零宽断言用于匹配某个位置前或后的子串,但不包括在匹配结果中。

import re pattern = r"\d+(?= dollars)" # 匹配 "dollars" 前面的数字 string = "I have 100 dollars." result = re.findall(pattern, string) print(result) # Output: ['100'] 4. 实例演示 4.1 邮箱验证

使用正则表达式验证输入的字符串是否为有效的邮箱地址。

import re pattern = r"^\w+@\w+\.\w+$" # 匹配邮箱地址 email = "test@example.com" result = re.match(pattern, email) if result: print("Valid email address") else: print("Invalid email address") 4.2 URL提取

从文本中提取所有的URL链接。

import re pattern = r"http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\\(\\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+" text = "Visit my website at https://example.com. You can also check out https://example.org." result = re.findall(pattern, text) print(result) # Output: ['https://example.com', 'https://example.org'] 4.3 HTML标签提取

从HTML文档中提取所有的标签内容。

import re pattern = r"<([^>]+)>" # 匹配HTML标签 html = "<h1>Hello</h1><p>World</p>" result = re.findall(pattern, html) print(result) # Output: ['h1', '/h1', 'p', '/p'] 4.4 敏感词过滤

使用正则表达式过滤文本中的敏感词。

import re sensitive_words = ["bad", "evil", "dangerous"] text = "This is a bad example." for word in sensitive_words: pattern = fr"\b{re.escape(word)}\b" # 匹配敏感词并确保单词边界 text = re.sub(pattern, "***", text) print(text) # Output: "This is a *** example." 结论

本文介绍了Python中正则表达式的基础知识和高级用法,包括基本匹配规则、使用re模块进行正则操作的方法以及一些常见的实例演示。掌握正则表达式的技巧和应用,将能够更高效地处理和处理文本数据。希望本文能够对您在Python中使用正则表达式有所帮助。

以上就是一文介绍Python中的正则表达式用法的详细内容,更多关于Python正则表达式的资料请关注软件开发网其它相关文章!



正则 正则表达式 Python

需要 登录 后方可回复, 如果你还没有账号请 注册新账号