50 re正则表达式模块

import re

# 正则表达式:是由一堆特殊司法拼接而成的表达式/规则,该表达式用于从一个大字符串中匹配出符合规则的子字符串
# 1、\w找到数字字母下划线
print(re.findall('\w\w\w', 'h ello 123_(0'))

# 2、\W 找到非字母数字下划线
print(re.findall('\W', 'h ello 123_(0'))

# 3、\s 找到空白符符号
print(re.findall('\s', '\h e\tll\no 123_(0)'))

print(re.findall('\w\s', 'h ello 123_(0'))

# 4、\S 找到非空白符号
print(re.findall('\S', 'h ello 123_(0'))

# 5、\d 找找到所有数字
print(re.findall('\d', 'h ello 123_(0'))

# 6、\D 找到所有非数字
print(re.findall('\D', 'h ello 123_(0'))

print(re.findall("a\db", "a1b a2b a b aab aaaaaaaa1b a2c a22c a 3c"))
# a1b a2b a b aab aaaaaaaa1b a2c a22c a 3c

# 7、\n与\t
msg = """h e\tll\n\no 123_ (0
\t1
    2
3
"""
print(re.findall('\n', msg))
print(re.findall('\t', msg))
print(re.findall(' ', msg))

# 8、^与$
print(re.findall("^egon", "egon asdf 213123 egonafsadfegon"))
# egon asdf 213123 egonafsadfegon
# ^egon

print(re.findall("egon$", "egon asdf 213123 egonafsadfegon "))
#                                                        egon$


print(re.findall("a\w\w\wc", "ab12c3c a213c"))
print(re.findall("^a\w\w\wc$", "ab_2c"))

print(re.findall("egon$", "egon asdf 213123 egonafsadfegon "))
# egon$
print(re.findall("a\w\w\wc", "ab12c3c a213c"))
print(re.findall("^a\w\w\wc$", "ab_2c"))

# 9.1 .:代表匹配一个字符,该字符可以是任意字符 (但不能匹配\n)
print(re.findall("a\db", "a1b a2b aab aaaaaaab a+b a-b a c"))
print(re.findall("a\wb", "a1b a2b aab aaaaaaab a+b a-b a c"))
print(re.findall("a.b", "a1b a2b aab aaaaaaab a+b a-b a b a c"))
print(re.findall("a.b", "a1b a2b aab aaaaaaab a\tb a-b a\nb a c", re.DOTALL))

# 9.2[]:代表匹配一个字符,我们可以指定该字符的范围
print(re.findall('a[+-]b', "a1b a2b aab aaaaaaab a+b a-b a b a c"))
print(re.findall('a[a-z]b', "a1b a2b aab aaaaaaab a+b a-b a b a c"))
print(re.findall('a[.*/+-]b', "a1b a2b aab aaaaaaab a+b a-b a b a c"))

# [^...]代表取反
print(re.findall("a[^0-9]b", "a.b a2b a*b a/b aAb aCb aab aaaaaaab a+b a-b a c"))  # -放在[]内的开头或结果
#
# 9.3 *: 左边那个字符出现0次或者无穷次
print(re.findall("ab*", "a ab abb abbbbbbbbbbbb bbbbbbbbb"))
# a ab abb abbbbbbbbbbbb bbbbbbbbb
#                        ab*

# 9.4 +: 左边那个字符出现1次或者无穷次
print(re.findall("ab+", "a ab abb abbbbbbbbbbbb bbbbbbbbb"))
# # a ab abb abbbbbbbbbbbb bbbbbbbbb
# ab+

# 9.5 {n,m}: 左边那个字符出现n次到m次
print(re.findall("ab{0,}", "a ab abb abbbbbbbbbbbb bbbbbbbbb"))
print(re.findall("ab*", "a ab abb abbbbbbbbbbbb bbbbbbbbb"))
print(re.findall("ab{1,}", "a ab abb abbbbbbbbbbbb bbbbbbbbb"))
print(re.findall("ab+", "a ab abb abbbbbbbbbbbb bbbbbbbbb"))

print(re.findall("ab{2,5}", "a ab abb abbb abbbb abbbbbbbb abbbbbbbbbbbb bbbbbbbbb"))

# 9.6 ?: 左边那个字符出现0次到1次
print(re.findall("ab?", "a ab abb abbbbbbbbbbbb bbbbbbbbb"))

# 9.7 .*: 匹配所有
print(re.findall("a.*b", "123 a1231-==-000b123123123123123b"))
# 123 a1231-==-000b123123123123123b
#     a.*b
# 加上问号变成非贪婪匹配
print(re.findall("a.*?b", "123 a1231-==-000b123123123123123b"))

print(re.findall("\d+\.?\d*", "as9fdasldf1111asdf3333dfadf3.4dafadf3.55655asdfsafd.5555"))

# 例1:
msg = '<a href="https://pan.baidu.com/s/1skWyTT7" target="_blank"><strong><span style="color: #ff0000;">原理图:https://pan.baidu.com/s/1skWyTT7</span></strong></a><a href="https://www.baidu/com">"点我啊"</a>'
url_pattern = re.compile('href="(.*?)"')
res = url_pattern.findall(msg)
print(res)

res = url_pattern.findall('<a href="www.sina.com.cn"></a>')
print(res)

# 例2:
print(re.findall("a.*b", "a1b a+b a-b a\nb a\tb", re.DOTALL))

# 10 ():分组
print(re.findall('ab+', 'ababab123'))  # ['ab', 'ab', 'ab']
print(re.findall('(ab)+123', 'ababab123'))  # ['ab'],匹配到末尾的ab123中的ab
# ababab123
# (ab)(ab)(ab)(ab)

# 10.1 取消分组
print(re.findall('(?:ab)+123', 'ababab123'))  # findall的结果不是匹配的全部内容,而是组内的内容,?:可以让结果为匹配的全部内容

# 11 |:或者
print(re.findall("compan(?:ies|y)", "Too many companies have gone bankrupt, and the next one is my company'"))

# Too many companies have gone bankrupt, and the next one is my company
#                                                               compan(ies|y)

print(re.findall("\d+\.?\d*", "as9fdasl333...4444df1111asdf3333dfadf333.44dafadf3.5555asdfsafd.5555"))
# as9fdasldf1111asdf3333dfadf333.44dafadf3.5555asdfsafd.5555
#                            \d+\.?\d*


# \d+\.?\d*
# 333333.3333333333333333


# 12. \
print(re.findall('a\\\\c', 'a\c a1c aac'))  # 对于正则来说a\\c确实可以匹配到a\c,但是在python解释器读取a\\c时,会发生转义,然后交给re去执行,所以抛出异常
print(re.findall(r'a\\c', 'a\c a1c aac'))  # 对于正则来说a\\c确实可以匹配到a\c,但是在python解释器读取a\\c时,会发生转义,然后交给re去执行,所以抛出异常

# ===========================re模块提供的方法介绍===========================
print(re.findall('e', 'alex make love'))  # ['e', 'e', 'e'],返回所有满足匹配条件的结果,放在列表里
print(re.search('e', 'alex make love'))  # e,只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。

print(re.search("\d+\.?\d*", "1.3 aa3.44aaa").group())
print(re.search("\d+\.?\d*", "asdfsadf"))

print(re.search("\d+\.?\d*", " 1.3 aa3.44aaa"))
print(re.match("\d+\.?\d*", " 1.3 aa3.44aaa"))

msg = "egon:18-male=10"
print(msg.split(':'))

print(re.split('[:=-]', msg))

msg = '<a href="https://pan.baidu.com/s/1skWyTT7" target="_blank"><strong><span style="color: #ff0000;">原理图:https://pan.baidu.com/s/1skWyTT7</span></strong></a><a href="https://www.baidu/com">"点我啊"</a>'
print(re.findall('href=".*?"', msg))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值