您的位置:

Python正则表达式使用实例

在Python编程中,使用正则表达式(Regular Expression)可以方便地进行字符串匹配和处理。本文将从多个方面介绍正则表达式的使用实例。

一、正则表达式使用实例

首先,我们先来看一些正则表达式的基本语法和符号:

字符匹配:
    .        匹配任意一个字符
    \d       匹配数字,等同于[0-9]
    \D       匹配非数字,等同于[^0-9]
    \w       匹配字母、数字、下划线,等同于[a-zA-Z0-9_]
    \W       匹配非字母、数字、下划线,等同于[^a-zA-Z0-9_]
    \s       匹配空格、制表符、换行符等空白字符
    \S       匹配非空白字符
    []       匹配括号内的任意一个字符,例如[abc]匹配a、b或c
    [^...]   匹配不在括号内的任意一个字符,例如[^abc]匹配除了a、b、c以外的任意一个字符

重复匹配:
    *        重复>=0次
    +        重复>=1次
    ?        重复0或1次
    {n}      重复n次
    {n,}     重复>=n次
    {n,m}    重复n~m次

位置匹配:
    ^        匹配字符串开头
    $        匹配字符串结尾
    \b       匹配单词边界
    \B       匹配非单词边界
    (?=...)  正向前查找,匹配括号内的表达式
    (?!...)  负向前查找,不匹配括号内的表达式
    (?<=...) 正向后查找,匹配括号内的表达式
    (?

下面是一些具体的正则表达式使用实例,以字符匹配为例:

1、匹配数字:

import re

a = '12345'

# 匹配一个数字
result = re.findall(r'\d', a)
print(result)
# output: ['1', '2', '3', '4', '5']

# 匹配数字串
result = re.findall(r'\d+', a)
print(result)
# output: ['12345']

2、匹配字母:

a = 'hello world'

# 匹配一个字母
result = re.findall(r'[a-z]', a)
print(result)
# output: ['h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd']

# 匹配单词
result = re.findall(r'\b[a-z]+\b', a)
print(result)
# output: ['hello', 'world']

二、Python正则表达式怎么用

Python提供了re模块来支持正则表达式。re模块中常用的函数有:

  • re.search(pattern, string, flags=0):在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象。
  • re.match(pattern, string, flags=0):尝试从字符串的起始位置匹配正则表达式,返回match对象。
  • re.findall(pattern, string, flags=0):搜索字符串,以列表形式返回全部匹配的子串。
  • re.finditer(pattern, string, flags=0):搜索字符串,返回一个包含匹配对象的迭代器。
  • re.sub(pattern, repl, string, count=0, flags=0):使用指定的替换字符串替换原字符串中满足正则表达式的所有子串。

下面是一些具体的使用实例:

1、使用re.search():

import re

text = "abcdefg"
search_result = re.search(r"cd", text)
print(search_result.group())
# output: 'cd'

2、使用re.findall():

import re

text = "Cats are smarter than dogs"
findall_result = re.findall(r"\w+", text)
print(findall_result)
# output: ['Cats', 'are', 'smarter', 'than', 'dogs']

3、使用re.sub():

import re

text = "Python is fun, isn't it?"
sub_result = re.sub(r"is", "was", text)
print(sub_result)
# output: "Python was fun, isn't it?"

三、Python爬虫正则表达式

在爬虫开发中,使用正则表达式可以提取HTML页面中的数据信息。下面是一些具体的使用实例:

1、提取链接:

import re
import urllib.request

url = "https://www.baidu.com/"
response = urllib.request.urlopen(url)
html = response.read().decode('utf-8')

links = re.findall(r'"((http|ftp)s?://.*?)"', html)
for link in links:
    print(link[0])

2、提取图片:

import re
import urllib.request

url = "https://www.google.com/"
response = urllib.request.urlopen(url)
html = response.read().decode('utf-8')

images = re.findall(r'
    

四、Python正则表达式操作

在Python中,使用正则表达式有很多种操作和方法,下面是一些常用的操作:

1、编译正则表达式:

import re

pattern = re.compile(r'\d+')
result = pattern.findall('one123two456three789')
print(result)
# output: ['123', '456', '789']

2、match对象的方法:

import re

match_obj = re.match(r'\d+', '123abc456')
print(match_obj.group())  # group()方法返回被匹配的字符串

match_obj = re.match(r'(\d+)(\w+)', '123abc456')
print(match_obj.group(1))  # group(1)方法返回第一个括号内匹配的字符串
print(match_obj.group(2))  # group(2)方法返回第二个括号内匹配的字符串

3、使用分组:

import re

text = "cat, bat, sat, hat"
result = re.sub(r'(\w+), (\w+), (\w+), (\w+)', r'\1 and \2 and \3 and \4', text)
print(result)
# output: 'cat and bat and sat and hat'

五、Python正则表达式例子

下面是一些实用的正则表达式例子:

1、匹配电子邮件:

import re

pattern_email = re.compile(r'\w+@\w+.(com|cn|net)')  # 只匹配.com, .cn, .net结尾的邮箱
emails = ['abc@qq.com', '123@163.com', 'aaa@126.net', 'bbb@qq.cn', 'ccc@xxx.com']
for email in emails:
    match_obj = re.match(pattern_email, email)
    if match_obj:
        print(match_obj.group())

2、匹配手机号码:

import re

pattern_phone = re.compile(r'(13\d|14[579]|15[^4\D]|17[^49\D]|18\d)\d{8}')
phones = ['12345678901', '13612345678', '98765432101', '18732165498', '15365478903']
for phone in phones:
    match_obj = re.match(pattern_phone, phone)
    if match_obj:
        print(match_obj.group())

3、匹配IP地址:

import re

pattern_ip = re.compile(r'\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b')
ips = ['192.168.1.1', '172.16.0.1', '8.8.8.8', '0.0.0.0', '11.11.11.1111']
for ip in ips:
    match_obj = re.match(pattern_ip, ip)
    if match_obj:
        print(match_obj.group())

六、Python正则表达式举例

下面举一些实际中常用的正则表达式例子:

1、匹配身份证号码:

import re

pattern_id = re.compile(r'\d{17}[\dXx]')
ids = ['110101199003076318', '370831199312123212', '360482198606021990', '510105198705142345', '820000199710200003']
for id in ids:
    match_obj = re.match(pattern_id, id)
    if match_obj:
        print(match_obj.group())

2、匹配日期:

import re

pattern_date = re.compile(r'\d{4}-\d{2}-\d{2}')
dates = ['2022-01-02', '2022-01-32', '2022-13-01', '2022/01/02', '2022-01-02 12:34:56']
for date in dates:
    match_obj = re.match(pattern_date, date)
    if match_obj:
        print(match_obj.group())

3、匹配URL:

import re

pattern_url = re.compile(r'https?://[\S]+')
urls = ['http://www.baidu.com', 'https://www.google.com', 'ftp://www.abc.com', 'mailto:test@test.com']
for url in urls:
    match_obj = re.match(pattern_url, url)
    if match_obj:
        print(match_obj.group())

以上就是Python正则表达式的使用实例,通过不断的实践和尝试,相信大家已经可以熟练地应用正则表达式来解决实际问题了。