程序代码篇---通配符&正则表达式&URL


文章目录


前言

以上就是今天要讲的内容,本文简单介绍了通配符、正则表达式、URL。


Linux中的通配符

在Linux中,通配符是在命令行中 用于匹配文件名的一套特殊字符。以下是一些常见的Linux通配符及其详细说明:

*(星号)

匹配任意数量的字符(包括零个字符)。

示例:ls *.txt 会列出当前目录下所有以 .txt 结尾的文件。

?(问号)

匹配任意单个字符。

示例:ls chapter?.txt 会列出 chapter1.txt, chapter2.txt 等,但不会列出 chapter10.txt。

[...](方括号)

匹配方括号内的任意一个字符。

示例:ls chapter[1-3].txt 会列出 chapter1.txt, chapter2.txt, chapter3.txt。

[^...](脱字符和方括号)

匹配不在方括号内的任意一个字符。

示例:ls chapter[^1-3].txt 会列出除了 chapter1.txt, chapter2.txt, chapter3.txt 之外的所有 chapter*.txt 文件。

-(连字符)

在方括号内使用时,表示字符范围

示例:ls [a-z].txt 会列出所有以小写字母开头的 .txt 文件。

!(感叹号)

在某些命令中,如 find 或 locate,用于排除匹配特定模式的文件。

示例:find . -name ".txt" ! -name ".bak.txt" 会查找所有 .txt 文件,但排除以 .bak.txt 结尾的文件。

~(波浪号)

代表当前用户的主目录。

示例:cd ~ 会将当前工作目录更改为当前用户的主目录。

{}(花括号)

匹配花括号内的任意一个字符串 ,可以用来创建多个相似名称的文件名列表。

示例:touch {file1,file2,file3}.txt 会创建 file1.txt, file2.txt, file3.txt。

;(分号)

在命令行中分隔多个命令

示例:ls; echo "done listing files" 会先执行 ls 命令,然后打印 "done listing files"。

&& 和 ||(逻辑与和逻辑或)

用于在命令行中根据前一个命令的执行结果来决定是否执行后一个命令。

?示例:ls && echo "directory is not empty" 如果 ls 命令成功执行(即目录不为空),则打印 "directory is not empty"。

使用通配符时,要注意它们可能不会在所有上下文中都起作用。例如,在某些情况下,你可能需要使用引号将包含通配符的字符串括起来,以防止shell提前展开它们。此外,某些命令可能不支持所有通配符,或者需要额外的选项来启用通配符功能。

Python中的通配符

在Python中,通配符号通常与正则表达式(Regular Expressions)一起使用 ,或者在文件路径操作中使用。以下是一些在Python操作中常见的通配符号及其介绍:

正则表达式中的通配符号

.(点号)

用途:匹配除换行符之外的任意单个字符。

示例:re.findall(r"gr.y", "grey") 将匹配 "grey" 中的 "gr.y"。

*(星号)

用途:在正则表达式中通常不直接使用 ,但在re.VERBOSE模式下可以用来表示任意数量的字符 ,包括零个字符 。在**.组合中使用时,表示匹配任意数量的任意字符*。

示例:re.findall(r"gr.*y", "greeeeey") 将匹配 "greeeeey" 中的 "greeeeey"。

+

用途:匹配前面的子表达式一次或多次。

示例:re.findall(r"a+", "aaa") 将匹配 "aaa" 中的 "aaa"。

?

用途:匹配前面的子表达式零次或一次

示例:re.findall(r"colou?r", "color") 将匹配 "color" 中的 "color"。

^

用途:匹配输入字符串的开始位置

示例:re.findall(r"^Hello", "Hello World") 将匹配 "Hello World" 中的 "Hello"。

$

用途:匹配输入字符串的结束位置

示例:re.findall(r"World$", "Hello World") 将匹配 "Hello World" 中的 "World"。

[]

用途:匹配方括号内的任意一个字符(字符类)

示例:re.findall(r"[abc]", "a b c") 将匹配 "a","b","c"。

[^]

用途:匹配不在方括号内的任意一个字符

示例:re.findall(r"[^abc]", "def") 将匹配 "d","e","f"。

\

用途:转义字符,用于取消特殊字符的含义

示例:re.findall(r".", "a.b.c") 将匹配 "a.b.c" 中的 "."。

{m,n}

用途:匹配前面的子表达式至少m次,不超过n次。

示例:re.findall(r"a{2,3}", "aa ab ac") 将匹配 "aa"。

文件路径操作中的通配符号:

*

用途:匹配任意数量的字符。

示例:在Unix/Linux系统中,ls *.txt 将列出当前目录下所有以 ".txt" 结尾的文件。

?

用途:匹配任意单个字符。

示例:在Unix/Linux系统中,ls chapter?.txt 将列出 "chapter1.txt","chapter2.txt" 等。

[]

用途:匹配方括号内的任意一个字符。

示例:在Unix/Linux系统中,ls chapter[1-3].txt 将列出 "chapter1.txt","chapter2.txt","chapter3.txt"。

在Python中,可以使用glob模块来使用这些通配符号来匹配文件路径

python 复制代码
import glob

#列出当前目录下所有以 ".txt" 结尾的文件
for file in glob.glob("*.txt"):
    print(file)

#列出当前目录下所有 "chapter1.txt" 或 "chapter2.txt"
for file in glob.glob("chapter[12].txt"):
    print(file)

请注意,正则表达式中的通配符号文件路径操作中的通配符号在功能上有所不同,不要混淆使用。

Python正则表达式

在Python中,正则表达式是一种强大的字符串 处理工具,它允许你进行搜索、替换、分割和匹配字符串操作。以下是一些常用的正则表达式及其详细说明:

基本匹配字符

.

:匹配除换行符之外的任意单个字符

[abc]

:匹配方括号内的任意一个字符(在这个例子中是 "a"、"b" 或 "c")

[^abc]

:匹配不在方括号内的任意一个字符

\d

:匹配任意一个数字字符(等价于 [0-9])。

\D

:匹配任意一个非数字字符(等价于 [^0-9])。

\w

:匹配任意一个字母数字或下划线字符(等价于 [a-zA-Z0-9_])。

\W

:匹配任意一个非字母数字或下划线字符(等价于 [^a-zA-Z0-9_])。

\s

:匹配任意一个空白字符(空格、制表符、换行符等)。

\S

:匹配任意一个非空白字符

量词

*

:匹配前面的子表达式零次或多次

+

:匹配前面的子表达式一次或多次

?

:匹配前面的子表达式零次或一次

{m}

:精确匹配前面的子表达式 m 次

{m,n}

:匹配前面的子表达式至少 m 次,不超过 n 次

定位符

^

:匹配输入字符串的开始位置

$

:匹配输入字符串的结束位置

\b

:匹配一个单词边界,即单词和空格之间的位置

\B

:匹配非单词边界。

分组和引用

(exp)

:匹配 exp 并捕获文本到自动命名的组里

(?:exp)

:匹配 exp 但不捕获匹配的文本

\n

:引用编号为 n 的捕获组匹配的文本

选择符

|

:匹配两个或多个分支选择的任意一个

以下是一些常见的正则表达式示例及其用途:

python 复制代码
验证电子邮件地址:
import re
pattern = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"
email = "example@example.com"
if re.match(pattern, email):
    print("Valid email")
python 复制代码
提取URL:
pattern = r"http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\$\$,]|(?:%[0-9a-fA-F][0-9a-fA-F]))+"
text = "Visit https://www.example.com for more info."
urls = re.findall(pattern, text)
print(urls)
python 复制代码
替换文本中的特定单词:
text = "Hello world, hello universe."
pattern = r"hello"
new_text = re.sub(pattern, "hi", text, flags=re.IGNORECASE)
print(new_text)
python 复制代码
分割字符串:
text = "one,two,three,four"
pattern = r","
parts = re.split(pattern, text)
print(parts)

在使用正则表达式时,可以通过 re 模块中的函数如 re.match(), re.search(), re.findall(), re.sub(), re.split() 等来进行操作 。此外,可以通过添加标志(如 re.IGNORECASE 或 re.VERBOSE)来改变正则表达式的行为。

URL

URL(Uniform Resource Locator,统一资源定位符 )是互联网上用来指定信息位置的字符串 ,它用于定位网络上的资源 ,如网页、文件、图片等。以下是URL的详细组成和说明:

URL的组成

一个标准的URL通常包含以下几个部分:

协议/方案(Scheme)

定义了客户端应该使用哪种协议来访问资源。常见的协议有:

  1. http/https: 超文本传输协议(HTTP)安全的超文本传输协议(HTTPS)
  2. ftp: 文件传输协议(FTP)。
  3. file: 本地文件系统
  4. mailto: 电子邮件地址
  5. tel: 电话号码
  6. data: 直接嵌入数据的URL

认证信息(Authentication)

包括用户名和密码 ,用于访问受保护的资源 。这部分是可选的 ,格式为 username:password@

示例:http://username:password@example.com

主机名(Host)

指定资源所在的主机名或IP地址

示例:www.example.com 或 192.0.2.1

端口号(Port)

指定用于访问资源的服务器端口号 。如果省略,则使用协议的默认端口 (例如,HTTP的默认端口是80,HTTPS的默认端口是443)。

示例::8080

路径(Path)

指定服务器上的特定资源 。路径通常表示为一系列由斜杠(/)分隔的目录

示例:/path/to/resource

查询字符串(Query)

键值对的形式提供额外参数 ,通常用于数据库查询或其他服务。查询**字符串以问号(?)**开始。

示例:?key1=value1&key2=value2

片段标识符(Fragment)

也称为锚点 ,用于指定网页中的一个位置。片段标识符以井号(#)开始

示例:#section1

URL的示例

以下是一个完整的URL示例,并解释了它的各个部分:

https://username:password@www.example.com:443/path/to/resource?query=123\&lang=en#section1

协议(Scheme)

: https - 使用HTTPS协议。

认证信息(Authentication)

: username:password@ - 使用用户名和密码进行认证。

主机名(Host)

: www.example.com - 资源所在的服务器。

端口号(Port)

: :443 - 使用HTTPS的默认端口443,通常可以省略。

路径(Path)

: /path/to/resource - 资源在服务器上的位置。

查询字符串(Query)

: ?query=123&lang=en - 提供查询参数。

片段标识符(Fragment)

: #section1 - 指定网页中的特定部分。

URL的编码

由于URL中只能使用特定的字符集 ,对于超出该字符集的字符,URL会使用一种编码机制,称为URL编码或百分比编码 。例如,空格会被编码为%20,而中文等字符会被编码为一系列的百分比编码序列。

URL是互联网的基础组成部分 ,通过提供一种标准的方式来定位和访问网络资源 ,它们使得网络浏览变得简单和统一


总结

以上就是今天要讲的内容,本文仅仅简单介绍了通配符、正则表达式、URL。

相关推荐
Future_yzx26 分钟前
算法基础学习——快排与归并(附带java模版)
学习·算法·排序算法
三次拒绝王俊凯2 小时前
记忆力训练day08
学习
Mr_Xuhhh3 小时前
进程间通信
android·java·服务器·开发语言·数据库
英国翰思教育4 小时前
留学毕业论文如何利用不同问题设计问卷
人工智能·深度学习·学习·算法·学习方法·论文笔记
eggcode4 小时前
【CSS入门学习】Flex布局设置div水平、垂直分布与居中
css·学习
2501_903238654 小时前
Spring Boot与H2数据库:快速搭建内存数据库应用
数据库·spring boot·oracle·个人开发
end_SJ5 小时前
FreeRTOS学习 --- 动态任务创建和删除的详细过程
学习
Xam_d_LM5 小时前
【Linux】列出所有连接的 WiFi 网络的密码
linux·服务器·网络
武陵悭臾5 小时前
网络爬虫学习:应用selenium获取Edge浏览器版本号,自动下载对应版本msedgedriver,确保Edge浏览器顺利打开。
学习·selenium·edge·deepseek·winreg·zipfile
davenian6 小时前
< OS 有关 > Android 手机 SSH 客户端 app: connectBot
运维·服务器·网络安全·ssh