Python正则表达式

一、正则表达式

1.1 语法

1.1.1 限定符

  • *:匹配前面的子表达式零次或多次。zo 能匹配 "z" 以及 "zoo"。等价于 {0,}。
  • +:匹配前面的子表达式一次或多次。等价于 {1,}。
  • ?:匹配前面的子表达式零次或一次。
  • {m,n}:最少匹配 m 次且最多匹配 n次。

    1.1.2 特殊字符(匹配字符字符:\$)

  • $:匹配输入字符串的结尾位置。
  • ( ):标记子表达式的开始和结束
  • .:匹配除换行符\n之外的任何单字符
  • [:标记一个中括号表达式的开始.
  • ^:匹配输入字符串的开始位置,除非在方括号表达式中使用,当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合。
  • {}:限定符
  • |:指明两项之间的一个选择,或运算。

    1.2.3 普通字符及其等价形式

  • [abc]:匹配 [] 中的所有字符,单个。
  • [A-Z]:匹配所有大写字母;[a-z] 表示所有小写字母。
  • [\s\S]:匹配所有。\s 是匹配所有空白符,包括换行,\S 非空白符,不包括换行。
  • \w:匹配字母、数字、下划线。等价于 [A-Za-z0-9_]
  • \d:匹配数字,等价于[0-9]

    1.2修饰符及优先级

    1.2.1 修饰符

  • i:ignore - 不区分大小写,匹配设置为不区分大小写,搜索时不区分大小写,X 和 x 没有区别。
  • g:global - 全局匹配,查找所有的匹配项。
  • m:multi line - 多行匹配,使边界字符 ^ 和 $ 匹配每一行的开头和结尾,多行,不是整个字符串的开头和结尾。
  • s:特殊字符圆点 . 中包含换行符 \n默认情况下的圆点 . 是匹配除换行符 \n 之外的任何字符,加上 s 修饰符之后, . 中包含换行符 \n。

    1.2.2 优先级

    从高到低:
    \:转义符
    (), (?:), (?=), []:圆括号和方括号
    *, +, ?, {n,m}:限定符
    ^, $, \任何元字符、任何字符 定位点和序列(即:位置和顺序)
    |:或运算

    1.2 简单示例

    [1-9][0-9]{4,10}$  :qq号
    go+gle   :匹配 {gogle, google, gooogle, ...}
    colou?r    :匹配 {color, colour}
    gr(a|e)y    :匹配 {gray, grey}

    二、Python应用正则表达式

    Python中的正则表达式使用模块 re 来处理。

    2.1 re.compile 函数

    compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,让后面的函数来使用pattern对象。

    re.compile(pattern, flags)
    pattern正则表达式:"\d+"
    flags : 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:
    re.I 忽略大小写
    re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
    re.M 多行模式
    re.S 即为 . 并且包括换行符在内的任意字符(. 不包括换行符)
    re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
    re.X 为了增加可读性,忽略空格和 # 后面的注释

    举例:

    import re
    pattern = re.compile(r'\d+') # 创建一个匹配数字的正则表达式

    2.2 re.match函数

    re.match 是 Python 中的一个内置函数,它是正则表达式模块 re 的一部分。这个函数用于检查一个字符串是否与一个正则表达式模式匹配。
    re.match 函数的语法如下:

    re.match(pattern, string, flags=0)

    参数说明:
    pattern:这是一个字符串,包含你想要匹配的正则表达式。
    string:这是你想要检查的字符串。
    flags:这是一个可选的参数,用于指定正则表达式的标志。例如,re.IGNORECASE 标志可以使匹配不区分大小写。
    如果字符串与正则表达式匹配,re.match 函数会返回一个匹配对象。如果匹配失败,它会返回 None。
    下面是一个使用 re.match 函数的简单示例:

    import re
    match = re.match('Hello.*', 'Hello world!')  # 检查字符串是否以 'Hello' 开头
    if match:
    print('匹配成功')
    else:
    print('匹配失败')
    match = re.match('hello.*', 'Hello world!', re.IGNORECASE)  # 使用 re.IGNORECASE 标志,不区分大小写
    if match:
    print('匹配成功')
    else:
    print('匹配失败')

    2.3 re.search方法

    re.search是Python的正则表达式库re的一个方法,用于在字符串中搜索模式。

它的基本语法是:

re.search(pattern, string, flags=0)

这里:
pattern 是你要搜索的正则表达式模式。
string 是你要在其中搜索的字符串。
flags 是一个可选的参数,用于指定正则表达式的标志。例如,re.IGNORECASE 标志可以使搜索不区分大小写。
如果找到了与模式匹配的子串,re.search会返回一个匹配对象,否则返回None。

下面是一个简单的使用示例:

import re
text = "Hello, I am a Python programmer."
match = re.search("Python", text) # 查找 "Python" 这个词

if match:
    print("Found!")
else:
    print("Not found.")

注意:re.search会扫描整个字符串来寻找匹配的模式,如果字符串非常大或者包含非常特殊的模式,这可能会很慢。如果你需要对大型文本或特殊模式进行高效的搜索,可能需要考虑使用更专门的方法,如 re.finditer 或 re.compile。

findall

用于查找一个模式在字符串中所有出现的位置。它返回一个列表,其中包含所有匹配的子字符串。例如:

import re
text = "The quick brown fox jumps over the lazy dog"
pattern = "fox"
matches = re.findall(pattern, text)
print(matches) # Prints ['fox']

替换和分割字符串

使用 re.sub() 方法可以替换字符串中的模式。

python
import re
text = "Python 是一种非常强大的编程语言。"
new_text = re.sub("Python", "Java", text)
print(new_text)

使用 re.split() 方法可以根据模式分割字符串。

import re
text = "Python,Java,C++"
lang = re.split(",", text)
print(lang)

题外

https://regex101.com/,这个网站可以在线看是否是我们要的字符串

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇