Python 正则表达式

#[a-fA-F0-9]{6}

^#[a-fA-F0-9]{6}$

#[a-fA-F0-9]{6}\b

flags参数

  • re.I re.IGNORECASE

    • 忽略字母大小写。
  • re.L re.LOCALE

    • 影响:W、w、B、b这取决于当前的本地化设置。
  • re.M re.MULTILINE

    • 使用本标志后,^$ 匹配行首和行尾时,会增加换行符之前和之后的位置。
  • re.S re.DOTALL

    • 使.特殊字符完全匹配任何字符,包括换行
    • 没有这个标志时.匹配除了换行符外的任何字符。
  • re.X re.VERBOSE

    • 当该标志被指定时,在 RE 字符串中的空白符被忽略,除非该空白符在字符类中或在反斜杠之后。它也可以允许你将注释写入 RE,这些注释会被引擎忽略。
    • 注释用#号 来标识,不过该符号不能在字符串或反斜杠之后。

1.忽略大小写

import re
text = '我爱Python我爱python'
pat1 = 'p'
# search
r1 = re.findall(pattern=pat1, string=text, flags=re.I)
print(r1)

代码运行结果

['p','p']

2.多行模式

import re
text = '我爱数学\n我爱Python\n我爱python'
pat1 = '^我'
# search
r1 = re.findall(pattern=pat1, string=text)
r2 = re.findall(pattern=pat1, string=text, flags=re.M)
print(r1)
print(r2)

代码运行结果

[‘我’]
[‘我’, ‘我’, ‘我’]

3.匹配任何字符

import re
text = '''
我爱Python
我爱pandas
'''
pat1 = '.我'
# search
r1 = re.findall(pattern=pat1, string=text, flags=re.S)
print(r1)
r2 = re.findall(pattern=pat1, string=text)
print(r2)

代码运行结果

[’\n我’, ‘\n我’]
[]

4.正则表达式中的flags

string = 'first line\nsecond line\nthird line'

pattern1=re.compile(r'^\w+')
pattern2=re.compile(r'^\w+',re.M)

result1 = re.findall(pattern1,string )
result1 = re.findall(pattern2,string )

print(result1)
print(result1)

代码运行结果

['first']
['first', 'second', 'third']

5.DOTALL,此模式下 '.' 的匹配不受限制,可匹配任何字符,包括换行符,也就是默认是不能匹配换行符

string = '''first line
    ...: second line
    ...: third line'''

regex1=re.compile('.+',re.S)
regex2=re.compile('.+')

result1 = regex1.findall(string)
result1 = regex2.findall(string)

print(result1)
print(result1)

代码运行结果

['first line\nsecond line\nthird line']
['first line', 'second line', 'third line']

6.VERBOSE,冗余模式, 此模式忽略正则表达式中的空白和#号的注释

# 没注释的patten
patten1 = "[\w+\.]+@[a-zA-Z\d]+\.(com|cn)"

# 带注释的patten
patten2= """[\w+\.]+  # 匹配@符前的部分
@  # @符
[a-zA-Z\d]+  # 邮箱类别
\.(com|cn)   # 邮箱后缀"""

email_regex = re.compile(patten=patten1)
email_regex = re.compile(patten=patten2, re.X)
posted @ 2023-02-27 22:22  LittleDuo  阅读(18)  评论(0)    收藏  举报