python中的正则表达式

字符匹配:
    r'westos'


字符类:
    [pP]ython
    westos[pP]
    [aeiou]
    [a-z]
    [A-Z]
    [a-zA-Z0-9]
    [^aeiou]
    [^0-9]
特殊字符类:
    .: 匹配除了\n之外的任意字符; [.\n]
    \d:  digit--(数字), 匹配一个数字字符, 等价于[0-9]
    \D: 匹配一个非数字字符, 等价于[^0-9]
    \s:  space(广义的空格: 空格, \t, \n, \r), 匹配单个任何的空白字符;
    \S:  匹配除了单个任何的空白字符;
    \w:  字母数字或者下划线, [a-zA-Z0-9_]
    \W: 除了字母数字或者下划线, [^a-zA-Z0-9_]

"""
import re


# 匹配数字
# pattern = r'\d'
pattern = r'[0-9]'
string = "hello_1$%"
print(re.findall(pattern, string))


# 匹配字母数字或者下划线;
# pattern = r'\w'
pattern = r'[a-zA-Z0-9_]'
string = "hello_1$%"
print(re.findall(pattern, string))

# 匹配除了字母数字或者下划线;
# pattern = r'\W'
pattern = r'[^a-zA-Z0-9_]'
string = "hello_1$%"
print(re.findall(pattern, string))

# .: 匹配除了\n之外的任意字符; [.\n]
print(re.findall(r'.', 'hello westos\n\t%$'))
# regular experssion
import re

# *************************match方法*************************8
#       match尝试从字符串的起始位置开始匹配;
#           - 如果起始位置没有匹配成功, 返回None;
#           - 如果起始位置匹配成功, 返回一个对象, 通过group方法获取匹配的内容;
# Try to apply the pattern at the start of the string, returning
#     a match object, or None if no match was found.
aObj = re.match(r'we', 'wetoshello')
print(aObj)
print(aObj.group())

# \d 单个数字
# \D \d的取反 , 除了数字之外
bObj = re.match(r'\d', '1westos')
if bObj:
    print(bObj.group())

bObj = re.match(r'\D', '_westos')
if bObj:
    print(bObj.group())

#  *****************************findall********************
#  findall会扫描整个字符串, 获取匹配的所有内容;
res = re.findall(r'\d\d', '阅读数为2 点赞数为10')
print(res)

# *************************search*******************8
# search会扫描整个字符串, 只返回第一个匹配成功的内容的SRE对象;
#           - 如果起始位置没有匹配成功, 返回None;
#           - 如果起始位置匹配成功, 返回一个对象, 通过group方法获取匹配的内容;

resObj = re.search(r'\d', '阅读数为8 点赞数为10')

if resObj:
    print(resObj.group())


^((https|http|ftp|rtsp|mms)?:\/\/)[^\s]+


# ^: 以什么开头
# (https|http|ftp|rtsp|mms): 代表一个分组
# [https|http|ftp|rtsp|mms]: 代表一个分组




^:
    如果没有在[]里面的时候, 代表以什么开头;
    如果在[]里面的时候,代表除了...之外;
"""
# \d ==== [0-9] === [0123456789]
import re

url = 'http://www.baidu.com'
pattern = r'^((https|http|ftp|rtsp|mms)?:\/\/)\S+'

# 进行分组的时候, findall方法只返回分组里面的内容;
# print(re.findall(pattern, url))

resObj = re.search(pattern, url)
if resObj:
    # group方法会返回匹配的所有内容;
    print(resObj.group())
    # groups方法返回分组里面的内容;
    print(resObj.groups())
# \1: 代表的是一定要与第一个分组的内容保持一致, 否则不匹配;
\d{4}(\-|\/|.)\d{1,2}\1\d{1,2}

"""

import re

date = '2019-10-10'
pattern = r'\d{4}(\-|\/|.)\d{1,2}\1\d{1,2}'

reObj = re.search(pattern, date)
if reObj:
    print(reObj.group())
    print(reObj.groups())

字符串是否包含中文 []表示匹配方括号的中任意字符,
\u4e00是Unicode中汉字的开始,\u9fa5则是Unicode中汉字的结束



    [\w\-\u4e00-\u9fa5]+

"""

import re
user = '西部开源123'
pattern = r'[\w\-\u4e00-\u9fa5]+'
print(re.findall(pattern, user))


表示分组
        | : 匹配| 左右任意一个表达式即可;
        (ab): 将括号中的字符作为一个分组
        \num: 引用分组第num个匹配到的字符串
        (?P<anme>): 分组起别名
        (?P=name) : 引用分组的别名

"""
import re

print(re.findall(r'westos|hello', "hellowestos"))
# 进行分组的时候, findall方法只返回分组里面的内容;
print(re.findall(r'(http|https)(.+)', 'http_hello'))

# search
sreObj = re.search(r'(http|https)(.+)', 'http_hello')
if sreObj:
    # group方法会返回匹配的所有内容;
    print(sreObj.group())
    # groups方法返回分组里面的内容;
    print(sreObj.groups())



# 需求: 获取标签里面的文字, 并判断标签是否成对出现?
htmlStr = "<html><p>welcome to westos!</p></html>"
pattern = r'<(\w+)><(\w+)>(.+)</\2></\1>'
print(re.findall(pattern, htmlStr))
print(re.findall(pattern, htmlStr)[0][2])

# 需求: 分组起别名?
htmlStr = "<html><p>welcome to westos!</p></html>"
pattern = r'<(?P<FirstTag>\w+)><(?P<SecondTag>\w+)>(?P<Text>.+)' \
          r'</(?P=SecondTag)></(?P=FirstTag)>'
print(re.findall(pattern, htmlStr))
sreObj = re.search(pattern, htmlStr)
if sreObj:
    print(sreObj.group())
    print(sreObj.groups())
    print(sreObj.groupdict())
    print(sreObj.groupdict()['Text'])


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值