文章目录
- 前言
- Linux中的通配符
-
- *(星号)
- ?(问号)
- [...](方括号)
- [^...](脱字符和方括号)
- -(连字符)
- !(感叹号)
- ~(波浪号)
- {}(花括号)
- ;(分号)
- [&& 和 ||(逻辑与和逻辑或)](#&& 和 ||(逻辑与和逻辑或))
- Python中的通配符
- Python正则表达式
- 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)
定义了客户端应该使用哪种协议来访问资源。常见的协议有:
- http/https: 超文本传输协议(HTTP)和安全的超文本传输协议(HTTPS)。
- ftp: 文件传输协议(FTP)。
- file: 本地文件系统。
- mailto: 电子邮件地址。
- tel: 电话号码。
- data: 直接嵌入数据的URL。
认证信息(Authentication)
包括用户名和密码 ,用于访问受保护的资源 。这部分是可选的 ,格式为 username:password@。
主机名(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。