Python高级(21)—单个字符的匹配、正则表达式与原始字符串

◎知识点

  1. 单个字符的匹配

  2. 正则表达式与原始字符串


◎脚本练习

▽ 单个字符的匹配

import re

print(re.match(r'...', 'c-8'))          # <re.Match object; span=(0, 3), match='c-8'>
print(re.match(r'...', 'c\n8'))         # None
print(re.match(r'...', 'c\n8', re.S))   # <re.Match object; span=(0, 3), match='c\n8'>

print(re.match(r'\d\d\d', '123abc'))    # <re.Match object; span=(0, 3), match='123'>
print(re.match(r'\D\D\D', 'a-b123'))    # <re.Match object; span=(0, 3), match='a-b'>

print(re.match(r'\w\w\w', 'c_8###'))    # <re.Match object; span=(0, 3), match='c_8'>
print(re.match(r'\W\W\W', '@-#c_8'))    # <re.Match object; span=(0, 3), match='@-#'>

# <re.Match object; span=(0, 6), match=' \t\r\n\x0c\x0b'>
print(re.match(r'\s\s\s\s\s\s', ' \t\r\n\f\vabc'))
# <re.Match object; span=(0, 3), match='c-3'>
print(re.match(r'\S\S\S', 'c-3 \t'))

print(re.match(r'[abc]', 'b'))      # <re.Match object; span=(0, 1), match='b'>
print(re.match(r'[^abc]', 'f'))     # <re.Match object; span=(0, 1), match='f'>
print(re.match(r'[a-zA-Z]', 'M'))   # <re.Match object; span=(0, 1), match='M'>
print(re.match(r'[a-n&h-t]', 'k'))  # <re.Match object; span=(0, 1), match='k'>

Python高级(21)—单个字符的匹配、正则表达式与原始字符串Python高级(21)—单个字符的匹配、正则表达式与原始字符串


▽ 正则表达式与原始字符串

"""
    通常用原始字符串来表示正则表达式,因为在原始字符串中,包含哪些字符就表示哪些字符,而无需考虑
转义字符。
"""

import re

# 在原始字符串r'\d'中,包含了一个反斜杠和一个d
# 在正则表达式中,用一个反斜杠和一个d匹配任意一个数字
print(re.match(r'\d', '8')) # <re.Match object; span=(0, 1), match='8'>

"""
    如果不用原始字符串来表示正则表达式,而是用普通字符串来表示,则需要考虑转义字符。
"""

# 在普通字符串中,要用两个\\表示一个反斜杠
# 所以,'\\d'表示的是:一个反斜杠和一个d
# 在正则表达式中,用一个反斜杠和一个d匹配任意一个数字
print(re.match('\\d', '8')) # <re.Match object; span=(0, 1), match='8'>

"""
    在正则表达式中,某些字符具有特殊含义,例如: \.^$? +*{}[]()|。如果想要使用这些字符的字面值,
必须使用反斜杠进行转义。
"""


# 被匹配的字符串'a\\b'是一个普通字符串
# 在普通字符串中,要用两个\\表示一个反斜杠
# 所以,'a\\b'表示的是: a、一个反斜杠、b
# 在正则表达式中,反斜杠是具有特殊含义的,如果要表示反斜杠的字面值,必须使用反斜杠进行转义
# 因此,原始字符串r'a\\b'表示的是: a、一个反斜杠、b
print(re.match(r'a\\b', 'a\\b'))    # <re.Match object; span=(0, 3), match='a\\b'>

# 如果用普通字符串表示上面的正则表达式
# 前两个\\表示一个反斜杠,后两个\\表示一个反斜杠
# 在正则表达式中,反斜杠是具有特殊含义的,如果要表示反斜杠的字面值,必须使用反斜杠进行转义
# 因此,前面两个\\表示的反斜杠,要对后面两个\\表示的反斜杠进行转义,从而表示一个反斜杠(反斜杠的字面值)
print(re.match('a\\\\b', 'a\\b'))    # <re.Match object; span=(0, 3), match='a\\b'>


◎脚本地址:https://github.com/anzhihe/learning/blob/master/python/practise/learn-python/python_senior/regex1.py

anzhihe 安志合个人博客,版权所有 丨 如未注明,均为原创 丨 转载请注明转自:https://chegva.com/5639.html | ☆★★每天进步一点点,加油!★★☆ | 

您可能还感兴趣的文章!

1 评论

  1. 这位博主,您好。在浏览完您的博客文章后,感觉您的博客内容质量非常的好,也达到了加入腾讯云自媒体分享计划的要求。
    现诚挚地向您发出邀请,邀请您加入腾讯自媒体分享计划:https://cloud.tencent.com/developer/support-plan?invite_code=347bs58ysckks 。待审核成功入驻后,会在社区后台为您发放相关得腾讯云无门槛代金券以及一些实物奖励。
    具体审核细则,请进入页面查看。

发表评论

电子邮件地址不会被公开。 必填项已用*标注