《Python侦探手册:用正则表达式破译文本密码》

news/2024/7/22 12:04:57/文章来源:https://blog.csdn.net/bsxbw427/article/details/139250300

在这个信息爆炸的时代,每个人都需要一本侦探手册。阿佑今天将带你深入Python的正则表达式世界,教你如何像侦探一样,用代码破解文本中的每一个谜题。从基础的字符匹配到复杂的数据清洗,每一个技巧都足以让你在文本处理的领域中成为高手!

文章目录

    • 1. 引言
      • 正则表达式的概念与重要性
      • Python中正则表达式的应用领域
    • 2. 背景介绍
      • 2.1 正则表达式基础
      • 2.2 Python中的正则表达式库
    • 3. 正则表达式基础操作
      • 3.1 字符匹配与位置锚定
      • 3.2 量词与贪婪模式
      • 3.3 字符类与范围
      • 示例代码
    • 4. 组合与捕获
      • 4.1 分组与反向引用
      • 4.2 零宽断言
    • 5. 高级正则表达式特性
      • 5.1 替换与分割
      • 5.2 编译选项与标志
      • 5.3 正则表达式性能优化
    • 6. 实战应用案例
      • 6.1 文本提取与清洗
      • 6.2 验证与格式匹配
    • 7. 结论
      • 正则表达式在Python中的威力总结
      • 持续学习与实践的重要性
      • 持续进步的小贴士

1. 引言

大家好,欢迎来到Python进阶的奇妙世界,今天阿佑要和大家聊的是正则表达式——这个听起来有点高深莫测,实则是编程界的瑞士军刀,功能强大到令人惊叹。

正则表达式的概念与重要性

想象一下,你是一个侦探,手里拿着放大镜,正在寻找线索。正则表达式就像是那个放大镜,它帮你在茫茫数据中快速定位到你需要的信息。无论是文本匹配、数据清洗,还是格式验证,正则表达式都能大显身手。

Python中正则表达式的应用领域

在Python的世界里,正则表达式就像是一把万能钥匙,解锁各种复杂问题的解决方案。从简单的文本搜索替换,到复杂的数据验证,再到高级的文本处理,正则表达式都能助你一臂之力。

举个例子,假设你是一个社交媒体公司的数据分析员,你需要从海量的帖子中提取出所有的电子邮件地址。如果没有正则表达式,你可能需要一行行地检查文本,这无疑是一项耗时且枯燥的工作。但有了正则表达式,你可以用一行代码就完成这项任务,效率提升何止百倍!

接下来,让我们一起进入正则表达式的神奇世界,探索它的奥秘,学习如何使用它来解决问题。别担心,我会用最接地气、最有趣的方式带你一步步深入了解。准备好了吗?让我们开始这段精彩的旅程吧!

在这里插入图片描述

2. 背景介绍

2.1 正则表达式基础

正则表达式,听起来是不是有点像数学中的“正则”?其实,它和数学里的正则概念并没有直接关系,但它确实是一种规则,用来描述、匹配字符串的一种强大工具。

历史与基本原理

正则表达式的历史可以追溯到20世纪50年代,由Unix操作系统的先驱者之一的Ken Thompson首次引入。它的原理基于模式匹配,通过一系列符号和特殊字符来定义搜索模式,从而实现对文本的快速检索和处理。

常用符号与元字符意义

正则表达式由一些特殊的符号组成,每个符号都有其特定的含义。比如:

  • . 点号代表任意单个字符(除了换行符)。
  • * 星号表示前面的元素可以出现零次或多次。
  • + 加号表示前面的元素至少出现一次。
  • ? 问号表示前面的元素可以出现零次或一次。
  • [] 方括号用于定义字符集,匹配其中的任意一个字符。

这些符号就像魔法咒语,组合起来可以施展出强大的文本处理魔法。

2.2 Python中的正则表达式库

在Python中,我们有一个专门的库来处理正则表达式,那就是re模块。它提供了丰富的函数来执行各种正则表达式操作。

re模块简介

re模块是Python标准库的一部分,不需要额外安装。它包含了几乎所有你需要的正则表达式功能,从简单的搜索到复杂的替换和分割。

compile函数与match/search方法

  • compile函数可以将正则表达式编译成正则表达式对象,这样做的好处是可以提高效率,特别是当你需要多次使用同一个正则表达式时。
  • match方法用于从字符串的起始位置开始匹配正则表达式。
  • search方法则是在字符串中搜索正则表达式的第一个位置,不局限于起始位置。

举个例子,假设你想要检查一个字符串是否以"Hello"开头,你可以这样写:

import repattern = re.compile(r'^Hello')
if pattern.match("Hello World"):print("匹配成功!")

这段代码会输出“匹配成功!”,因为"Hello World"确实以"Hello"开头。

通过这些基础的介绍,你应该对正则表达式有了初步的了解。但是,这仅仅是冰山一角。接下来,我们将深入探索正则表达式的更多高级特性和应用,准备好迎接挑战了吗?让我们继续前进!

3. 正则表达式基础操作

3.1 字符匹配与位置锚定

想象一下,你是一名侦探,正在寻找线索。在正则表达式的世界中,每一个字符都是一个线索,而位置锚定就是告诉你这些线索可能出现的地方。

字母数字与特殊字符匹配

在正则表达式中,每个字符通常代表它自己。比如说,如果你想匹配字母"a",你只需要写"a"。但有时候,一些字符有特殊的含义,比如.点号,它代表任意单个字符。所以,如果你想匹配一个点号,你需要用\.来表示。

^开始与$结束位置匹配

位置锚定就像是侦探的放大镜,^表示字符串的开始,而$表示字符串的结束。这就像是告诉你线索只能在特定的地方出现。比如,如果你想匹配一个字符串,它必须以"start"开头并以"end"结束,你可以这样写:^start.*end$

3.2 量词与贪婪模式

量词就像是侦探的放大镜的放大倍数,它们告诉你一个元素可以出现多少次。

重复次数表示:*、+、?

  • *星号表示前面的元素可以出现零次或多次。比如说,a*可以匹配零个或多个"a"。
  • +加号表示前面的元素至少出现一次。a+可以匹配一个或多个"a"。
  • ?问号表示前面的元素可以出现零次或一次。a?可以匹配零个或一个"a"。

非贪婪匹配原则

在正则表达式中,默认情况下,量词是贪婪的,它们会尽可能多地匹配元素。但有时候,我们希望它们尽可能少地匹配,这就是非贪婪模式。在量词后面加上?就可以实现非贪婪匹配。比如,a*?会尽可能少地匹配"a"。

3.3 字符类与范围

字符类和范围就像是侦探的工具箱,它们帮助你快速找到一组特定的线索。

[]定义字符集

方括号[]可以用来定义一个字符集,匹配其中的任意一个字符。比如,[abc]可以匹配"a"、“b"或"c”。

特殊字符类:\d, \w, \s

  • \d匹配任意数字,相当于[0-9]
  • \w匹配任意字母数字字符,包括下划线。
  • \s匹配任意空白字符,包括空格、制表符、换行符等。

范围指定:a-z, 0-9

在方括号中,你还可以使用范围指定,比如[a-z]匹配任意小写字母,[0-9]匹配任意数字。

示例代码

让我们来看一个实际的例子,假设你是一名图书管理员,需要找出所有以"The"开头的书名:

import rebooks = ["The Great Gatsby", "Moby Dick", "1984", "To Kill a Mockingbird"]
pattern = re.compile(r'^The')for book in books:if pattern.match(book):print(f"找到了以'The'开头的书名: {book}")

这段代码会输出:

找到了以'The'开头的书名: The Great Gatsby

通过这个例子,你可以看到正则表达式如何帮助我们快速地从大量数据中找到我们想要的信息。这只是基础操作,接下来我们将探索更高级的特性,准备好了吗?让我们继续深入正则表达式的神秘世界!

4. 组合与捕获

4.1 分组与反向引用

在正则表达式的世界里,分组就像是侦探的笔记本,用来记录和引用特定的线索。

圆括号的使用

圆括号()在正则表达式中用来创建一个分组,它允许你捕获匹配的部分,并在之后的操作中引用它。就像侦探在笔记本上画圈圈,标记重要的线索一样。

举个例子,假设你要匹配一个电子邮件地址,通常电子邮件的格式是username@domain。你可以这样写:

import reemail_pattern = re.compile(r'(\w+)@(\w+\.\w+)')
emails = ["alice@example.com", "bob@company.org", "charlie@work.net"]for email in emails:if email_pattern.match(email):print(f"用户名: {email_pattern.group(1)}, 域名: {email_pattern.group(2)}")

这段代码会输出每个电子邮件的用户名和域名,就像侦探从线索中提取关键信息一样。

组号与命名组

在圆括号中,你还可以通过组号来引用捕获的文本。组号就是圆括号中的序号,从1开始。此外,Python的re模块还支持命名组,你可以给分组起个名字,这样引用起来更加直观。

比如,我们可以给电子邮件的用户名和域名分别命名:

email_pattern = re.compile(r'(?P<username>\w+)@(?P<domain>\w+\.\w+)')

然后,你可以通过名字来引用这些分组:

for email in emails:if email_pattern.match(email):print(f"用户名: {email_pattern.group('username')}, 域名: {email_pattern.group('domain')}")

在这里插入图片描述

4.2 零宽断言

零宽断言就像是侦探的直觉,它帮助你在不消耗字符的情况下,判断某个位置是否符合特定的条件。

前瞻与后顾断言

前瞻断言(?=...)和后顾断言(?<=...)允许你在不捕获任何字符的情况下,检查字符串中是否存在特定的模式。这就像是侦探在不触碰现场的情况下,判断某个线索是否与案件有关。

举个例子,假设你要确保一个单词后面跟着一个逗号,但不包括逗号本身:

import retext = "I have an apple, a banana, and a pear."# 使用前瞻断言匹配单词后面跟着逗号但不包括逗号
pattern = re.compile(r'\b\w+(?=,)')
matches = pattern.findall(text)print("单词后面跟着逗号的有:", matches)

这段代码会输出:

单词后面跟着逗号的有: ['an apple', 'a banana']

边界匹配:\b, \B

边界匹配符\b\B用来匹配单词的边界和非边界。\b匹配单词的开头或结尾,而\B匹配任意不是单词边界的位置。

举个例子,假设你要匹配所有不是独立单词的"and":

pattern = re.compile(r'\Band\b')
matches = pattern.findall("I have an apple, a banana, and a pear and some oranges.")print("非独立单词的'and'有:", matches)

这段代码会输出:

非独立单词的'and'有: ['and']

通过这些组合和捕获技巧,你可以更精确地控制正则表达式的匹配过程,就像侦探一样,通过细致的观察和推理,找到隐藏在文本中的线索。准备好了吗?我们将继续探索正则表达式的更多高级特性,让侦探工作变得更加高效和有趣!

5. 高级正则表达式特性

5.1 替换与分割

正则表达式的替换和分割功能,就像是你的文本编辑器里的快捷键,让你在处理文本时更加得心应手。

sub与subn方法的应用

sub方法用于替换字符串中匹配正则表达式的第一个实例,而subn方法则替换所有匹配的实例,并返回替换的数量。这就像是你用橡皮擦掉错误的信息,然后用笔写上正确的内容。

举个例子,假设你是一名编辑,需要将所有"error"这个词替换为"mistake":

import retext = "This is a typo error. Please correct the error in the sentence."
corrected_text, num_replaced = re.subn(r'\berror\b', 'mistake', text)print(f"修正后的文本: {corrected_text}")
print(f"替换了 {num_replaced} 次。")

这段代码会输出:

修正后的文本: This is a typo mistake. Please correct the mistake in the sentence.
替换了 2 次。

split方法的高级用法

split方法通常用于分割字符串,但当结合正则表达式使用时,它可以按照特定的模式来分割文本,而不是默认的空白字符。

举个例子,假设你要分割一个包含多个日期的字符串,日期格式为"YYYY-MM-DD":

import redate_string = "2024-05-18, 2024-05-19, 2024-05-20"
dates = re.split(r',\s+', date_string)print("分割后的日期:", dates)

这段代码会输出:

分割后的日期: ['2024-05-18', '2024-05-19', '2024-05-20']

5.2 编译选项与标志

编译选项和标志就像是你编程时的注释,它们告诉正则表达式引擎如何处理你的模式。

忽略大小写、多行模式等

  • re.IGNORECASE或简写为re.I,让匹配时忽略大小写。
  • re.MULTILINE或简写为re.M,让^$匹配每一行的开始和结束,而不仅仅是整个字符串。

举个例子,假设你要在多行文本中找到所有以"start"开头的行,不考虑大小写:

import retext = """
start with a capital letter
start with a lowercase letter
START with an uppercase letter
"""pattern = re.compile(r'^start', re.IGNORECASE | re.MULTILINE)
matches = pattern.findall(text)print("匹配的行:", matches)

这段代码会输出:

匹配的行: ['start with a capital letter', 'start with a lowercase letter', 'START with an uppercase letter']

编译时定制行为

通过编译正则表达式,你可以设置特定的选项和标志,然后在多次匹配操作中重用这个编译后的模式,这样可以提高效率。

5.3 正则表达式性能优化

性能优化就像是给你的电脑升级硬件,让你的代码运行得更快。

预编译与缓存策略

当你需要多次使用同一个正则表达式时,使用re.compile预编译这个表达式,然后使用编译后的模式对象进行匹配,这样可以避免重复编译的开销。

精简正则表达式

编写简洁的正则表达式可以减少匹配时的计算量,提高性能。避免使用过于复杂的模式,尤其是那些带有大量回溯的模式。

举个例子,假设你有一个包含多个电话号码的文本,需要提取出所有的电话号码:

import retext = "Contact us at 123-456-7890, or 987-654-3210."
pattern = re.compile(r'\b\d{3}[-.]\d{3}[-.]\d{4}\b')phone_numbers = pattern.findall(text)print("提取的电话号码:", phone_numbers)

这段代码会输出:

提取的电话号码: ['123-456-7890', '987-654-3210']

通过这些高级特性,你可以更加灵活和高效地使用正则表达式来处理文本。就像是一个高级侦探,使用各种工具和技术来解决复杂的案件。准备好了吗?我们将继续深入探索正则表达式的神秘世界,让你成为一个文本处理的高手!

6. 实战应用案例

6.1 文本提取与清洗

在文本提取与清洗的世界里,正则表达式就像是一把锋利的瑞士军刀,帮助你轻松应对各种棘手的文本处理任务。

提取电子邮件地址、URL

想象一下,你是一名网络侦探,需要从海量的网络数据中提取出有用的电子邮件地址和URL。使用正则表达式,这项任务会变得非常简单。

import retext = """
Hello, you can contact me at example@example.com or visit my website at http://www.example.com.
"""# 提取电子邮件地址
email_pattern = re.compile(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b')
emails = email_pattern.findall(text)# 提取URL
url_pattern = re.compile(r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\\(\\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+')
urls = url_pattern.findall(text)print("提取的电子邮件地址:", emails)
print("提取的URL:", urls)

这段代码会输出:

提取的电子邮件地址: ['example@example.com']
提取的URL: ['http://www.example.com']

去除HTML标签

作为一名内容编辑,你可能需要从网页中提取纯文本内容,去除所有烦人的HTML标签。正则表达式在这里也能大显身手。

import rehtml_content = """
<p>Welcome to my <strong>blog</strong>. Enjoy your stay!</p>
"""# 去除HTML标签
clean_text = re.sub(r'<[^>]+>', '', html_content)print("清理后的文本:", clean_text)

这段代码会输出:

清理后的文本: Welcome to my blog. Enjoy your stay!

在这里插入图片描述

6.2 验证与格式匹配

在验证与格式匹配的任务中,正则表达式就像是一把精准的尺子,确保你的数据符合特定的格式要求。

邮政编码、电话号码验证

假设你是一名数据分析师,需要验证收集到的邮政编码和电话号码是否符合标准格式。

import re# 验证邮政编码
postal_code_pattern = re.compile(r'^\d{6}$')
postal_codes = ['123456', 'ABCDE', '12345']valid_postal_codes = [code for code in postal_codes if postal_code_pattern.match(code)]
print("有效的邮政编码:", valid_postal_codes)# 验证电话号码
phone_number_pattern = re.compile(r'^\d{3}[-.]\d{3}[-.]\d{4}$')
phone_numbers = ['123-456-7890', '1234567890', '123.456.7890']valid_phone_numbers = [number for number in phone_numbers if phone_number_pattern.match(number)]
print("有效的电话号码:", valid_phone_numbers)

这段代码会输出:

有效的邮政编码: ['123456']
有效的电话号码: ['123-456-7890', '123.456.7890']

用户名密码复杂度检查

作为一名网络安全专家,你需要确保用户的用户名和密码符合安全标准。

import re# 用户名验证(至少6个字符,包含字母和数字)
username_pattern = re.compile(r'^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{6,}$')# 密码验证(至少8个字符,包含大小写字母、数字和特殊字符)
password_pattern = re.compile(r'^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$')# 检查用户名和密码
usernames = ['user1', 'User123', 'short']
passwords = ['password', 'Pass123!', 'weak']valid_usernames = [username for username in usernames if username_pattern.match(username)]
valid_passwords = [password for password in passwords if password_pattern.match(password)]print("有效的用户名:", valid_usernames)
print("有效的密码:", valid_passwords)

这段代码会输出:

有效的用户名: ['User123']
有效的密码: ['Pass123!']

通过这些实战案例,你可以看到正则表达式在文本提取、清洗、验证和格式匹配等方面的强大能力。就像是一个多才多艺的超级英雄,正则表达式能够解决各种看似不可能的任务。准备好了吗?让我们一起继续探索正则表达式的无限可能,让你在文本处理的世界中所向披靡!

7. 结论

正则表达式在Python中的威力总结

在这段旅程的尾声,我们回顾一下,正则表达式就像是Python世界中的超级英雄,它有着无与伦比的能力,能够处理各种文本相关的疑难杂症。从简单的字符匹配到复杂的数据验证,从文本提取到格式清洗,正则表达式都能轻松应对。

正则表达式的强大之处在于它的灵活性和表达力,它能够用简洁的代码完成复杂的任务。就像我们之前看到的那样,无论是提取电子邮件地址、URL,还是去除HTML标签,或是进行数据验证,正则表达式都能以优雅的方式解决这些问题。

持续学习与实践的重要性

学习正则表达式就像是学习一门艺术,它需要时间和实践来掌握。随着你不断深入,你会发现正则表达式的世界是如此广阔,总有新的东西等待你去探索和学习。

不要害怕犯错,每一个错误都是学习和进步的机会。多写代码,多做实验,多解决实际问题,这是提高正则表达式技能的最佳途径。

持续进步的小贴士

  1. 多实践:实践是检验真理的唯一标准。多写代码,多尝试不同的正则表达式,你会在这个过程中学到很多。

  2. 学习资源:利用好Python官方文档、《精通正则表达式》这样的书籍,以及像regex101.com这样的在线实践平台。

  3. 理解原理:深入理解正则表达式的工作原理,这样你就能更好地编写和调试它们。

  4. 优化性能:学习如何优化你的正则表达式,让它运行得更快,更高效。

  5. 分享知识:把你学到的知识分享给其他人,教学相长,你会在这个过程中获得新的见解。

  6. 保持好奇心:对新知识保持好奇心,不断探索正则表达式的新特性和新用途。

最后,记住,正则表达式只是工具,真正重要的是你如何使用它。就像一把剑,它在剑客手中才能发挥出最大的威力。所以,拿起你的剑,继续在编程的世界里冒险吧!

准备好了吗?让我们带着正则表达式这个强大的工具,继续在Python的海洋中乘风破浪,探索更多的未知领域!

我是阿佑,一个专注于把晦涩的知识讲得有趣的中二青年,欢迎各位路过的看官关注~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1052555.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++ 将指针转换为 void* 后,转换为怎么判断原指针类型?

当将指针转换为void后&#xff0c;擦除了指针所指向对象的类型信息&#xff0c;因此无法通过void指针来判断原始指针的类型。我这里有一套编程入门教程&#xff0c;不仅包含了详细的视频讲解&#xff0c;项目实战。如果你渴望学习编程&#xff0c;不妨点个关注&#xff0c;给个…

【C++】Vector的简易模拟与探索

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

【LeetCode算法】第83题:删除排序链表中的重复元素

目录 一、题目描述 二、初次解答 三、官方解法 四、总结 一、题目描述 二、初次解答 1. 思路&#xff1a;双指针法&#xff0c;只需遍历一遍。使用low指向前面的元素&#xff0c;high用于查找low后面与low不同内容的节点。将具有不同内容的节点链接在low后面&#xff0c;实…

C语言 | Leetcode C语言题解之第116题填充每个节点的下一个右侧节点指针

题目&#xff1a; 题解&#xff1a; struct Node* connect(struct Node* root) {if (root NULL) {return root;}// 从根节点开始struct Node* leftmost root;while (leftmost->left ! NULL) {// 遍历这一层节点组织成的链表&#xff0c;为下一层的节点更新 next 指针stru…

滑动窗口-java

主要通过单调队列来解决滑动窗口问题&#xff0c;得到滑动窗口中元素的最大值和最小值。 目录 前言 一、滑动窗口 二、算法思路 1.滑动窗口 2.算法思路 3.代码详解 三、代码如下 1.代码如下 2.读入数据 3.代码运行结果 总结 前言 主要通过单调队列来解决滑动窗口问题&#xff…

动效设计师的角色与职责:创造视觉魔法!

当今社会&#xff0c;随着视频游戏和数字产品的不断发展&#xff0c;动态设计师这个职业也在逐步发展壮大&#xff0c;同时也吸引了很多热爱动画设计的朋友。动态设计的目的是在第一时间吸引用户的注意力。那你知道动态设计师是做什么的吗&#xff1f;动态设计师的发展前景如何…

微信资源混淆,导致的约束布局 Constraintlayout 控件重叠!

问题 1、广告六要素 虽然我不参与广告 sdk 接入等相关工作&#xff0c;但是最近总是听到一个词广告六要素。这到底是什么&#xff1f; 国内下载类广告&#xff0c;尤其是针对移动应用推广的广告&#xff0c;其成功实施往往围绕几个关键要素进行&#xff0c;这些要素能够帮助…

智研未来,直击 AI DevOps,阿里云用户交流日杭州站来啦!

在这个技术日新月异的时代&#xff0c;云上智能化 DevOps 正以前所未有的速度推动企业创新边界&#xff0c;重塑软件开发的效率与品质。 为深入探索这一变革之路&#xff0c;诚邀您参与我们的专属闭门技术沙龙&#xff0c;携手开启一场关于云上智能化 DevOps 的挑战、实践与未…

展现金融科技前沿力量,ATFX于哥伦比亚金融博览会绽放光彩

不到半个月的时间里&#xff0c;高光时刻再度降临ATFX。而这一次&#xff0c;是ATFX不曾拥有的桂冠—“全球最佳在线经纪商”(Best Global Online Broker)。2024年5月15日至16日&#xff0c;拉丁美洲首屈一指的金融盛会—2024年哥伦比亚金融博览会(Money Expo Colombia 2024) 于…

#12松桑前端后花园周刊-SolidStart、Vercel融资、Angular18、Nextjs15RC、p5.js、ChromeDevTools引入AI

⚡️行业动态 SolidStart 1.0 元框架发布 Solidjs 核心团队发布其元框架 SolidStart 1.0 正式版&#xff0c;其特点如下&#xff1a;基于文件系统的路由&#xff1b;支持SSR、流式SSR、CSR、SSG渲染模式&#xff1b;通过代码分割、树摇和无用代码删除构建优化&#xff1b;基于…

typora自动生成标题序号(修改V1.0)

目录 带序号效果图 解决方法 带序号效果图 解决方法 1.进入文件夹&#xff1a;文件–>偏好设置–>外观–>主题–>打开主题文件夹 2.如果没有base.user.css文件&#xff0c;新建一个。如果有直接用记事本打开&#xff0c;把下面代码拷贝进去保存。 /** initiali…

设计模式 19 模板模式 Template Pattern

设计模式 19 模板模式 Template Pattern 1.定义 模板模式&#xff08;Template Pattern&#xff09;是一种行为设计模式&#xff0c;它定义了一个算法的骨架&#xff0c;将一些步骤的具体实现延迟到子类中。在模板模式中&#xff0c;定义了一个抽象类&#xff0c;其中包含了一个…

什么是光栅化?

一、 什么是光栅化? 光栅化作用是将几何数据变换后转换为像素呈现在显示设备上的一个过程。几何数据转换为像素&#xff0c; 本质是坐标变换、几何离散化&#xff0c;如下&#xff1a; 其中包含了坐标变换和几何离散化&#xff1a; 二、光栅化完成了什么 3D中&#xff0c;物…

Vue2 Element-UI 分页组件el-pagination 修改 自带的total、跳转等默认文字

场景需求&#xff1a; Vue2 Element-UI 分页组件el-pagination 修改 自带的total、跳转等默认文字。如下图&#xff1a;默认提示字变成了英文&#xff0c;如何将其 变成 汉字提示呢&#xff1f; 解决方案&#xff1a; 1.方案1&#xff1a;修改DOM内容 不提倡此方案&#xf…

Mybatis——入门

新建 idea 准备 数据库 create table user(id int unsigned primary key auto_increment comment ID,name varchar(100) comment 姓名,age tinyint unsigned comment 年龄,gender tinyint unsigned comment 性别, 1:男, 2:女,phone varchar(11) comment 手机号 ) comment 用…

【网络安全】勒索软件ShrinkLocker使用 windows系统安全工具BitLocker实施攻击

文章目录 威胁无不不在BitLocker 概述如何利用BitLocker进行攻击如何降低影响Win11 24H2 装机默认开启 BitLocker推荐阅读 威胁无不不在 网络攻击的形式不断发展&#xff0c;即便是合法的 Windows 安全功能也会成为黑客的攻击工具。 卡巴斯基实验室专家 发现 使用BitLocker的…

流程引擎之compileflow idea 2024.*插件支持

之前有使用过多种类型工作流&#xff0c;但最近研究工作流引擎对比各有优劣&#xff0c;compileflow内存支持性能不错&#xff0c;但在idea新版本使用的时候发现插件不支持&#xff0c;干脆自己修改源码手撸一个&#xff08;当前版本2024.1验证可用&#xff0c;如果有其他版本不…

如何给出好的“文言一心”指令?

一、文言一心是什么&#xff1f; 在现代技术背景下&#xff0c;“文言一心”还是百度公司创建的一款大语言模型。这款模型基于飞桨深度学习平台和文心知识增强大模型&#xff0c;并拥有强大的中文语料库&#xff0c;可以理解和生成富含文化内涵和哲理的文本内容。其核心技术架构…

探索增强现实(AR)在AI去衣技术中的独特作用

引言&#xff1a; 随着人工智能&#xff08;AI&#xff09;技术的迅猛发展&#xff0c;我们见证了其在多个领域的突破性应用&#xff0c;从自然语言处理到图像识别&#xff0c;再到计算机视觉。其中&#xff0c;AI去衣技术作为计算机视觉领域中的一个具有争议性的分支&#xff…

基础—SQL—图形化界面工具的DataGrip使用(2)

一、回顾与引言 &#xff08;1&#xff09; 上次内容&#xff0c;博客讲到了DDL语句的数据库操作、表操作、表字段的操作的相关语法&#xff0c;然而之前都是在MySQL的命令行当中去操作演示的。这种方式可以用&#xff0c;但是使用的话&#xff0c;第一&#xff0c;在我们日常…