在Python中的元字符
元字符是正则表达式的一个非常重要的概念,它帮助我们使用Python的正则表达式模块解决编程任务。在本教程中,我们将学习Python中的元字符以及如何使用它们。我们将解释每个元字符,并给出简短且简单的示例。学习元字符的前提是您应该熟悉Python的正则表达式。如果不熟悉,请访问我们的 Python正则表达式 教程。
在Python中的元字符是什么
元字符是正则表达式的一部分,它们是表示正则表达式模式或格式的特殊字符。每个字符在正则表达式中要么是元字符,要么是普通字符。但是,元字符具有特殊意义。它们不用于匹配任何模式,而是用于定义在语句中查找特定模式的一些规则。元字符也被称为运算符、符号或标志。
下面是我们可以在Python中使用的正则表达式元字符的列表。
元字符 | 描述 | 示例 |
---|---|---|
[] |
表示一个字符的集合。 | “[a-z]” |
\ |
表示特殊序列。 | “\r” |
. |
表示某个特定位置出现任意字符。 | “Ja.v.” |
^ |
表示模式出现在字符串的开头。 | “^Java” |
$ |
表示模式出现在字符串的末尾。 | “point” |
* |
表示模式在字符串中出现零次或多次。 | “hello*” |
\+ |
表示模式在字符串中出现一次或多次。 | “hello+” |
{} |
表示模式在字符串中出现指定次数。 | “java{2}” |
| |
表示或者出现这个字符或那个字符。 | “java|point” |
() |
捕获和分组。 | (javatpoint) |
下面是每个特殊字符的解释及其代码。
[]方括号特殊字符
[]方括号表示一组字符。例如-假设我们想获取目标字符串内出现的任何abc字母。或者,我们想匹配方括号内的单词与目标字符串。我们可以使用 [abc] 来匹配这样的模式。[abc]将匹配包含a、b或c中的任何字符。
我们还可以使用-破折号指定字符的范围。
- [0-5] – 相当于[012345]。
- [A-E] – 相当于[ABCDE]。
- [a-d] – 相当于[abcd]。
让我们来理解下面的示例。
示例
import re
str1 = "Python is a most popular programming language. Javatpoint is best resource to learn it."
res = re.findall(r"[jtp]", str1)
print(res)
输出:
['t', 't', 'p', 'p', 'p', 'J', 't', 'p', 't', 't', 't', 't']
解释 –
上面的程序返回包含方括号中给定模式的所有出现的列表。
在目标字符串中同时搜索多个字符时,这个元字符可以非常有益。
反斜杠元字符 \
反斜杠用于转义各种字符,包括元字符。它还可以用于表示特殊序列。例如 – \d 用于查找从 0-9 的任意数字。
让我们看另一个示例 – 假设我们想要搜索匹配 #a 的字符串,其中 a 是紧跟着特殊字符 # 的字符。
下面是一些与 \ 一起使用的特殊字符的表格。
字符 | 描述 |
---|---|
\s | 用于匹配一个空格字符。 |
\S | 用于匹配一个非空格字符。 |
\0 | 用于匹配一个空字符。 |
\a | 用于匹配一个响铃或警报。 |
\d | 用于匹配一个十进制数字,即从0到9。 |
\D | 用于匹配任何非十进制数字。 |
\n | 用于匹配一个换行符。 |
\w | 用于匹配字母数字[0-9a-zA-Z]的字符。 |
\W | 用于匹配一个非单词字符。 |
\b | 用于匹配一个词边界。 |
让我们看下面的示例。
示例使用反斜杠(/)来表示前一个字符串。
import re
str1 = "Python is a most popular programming language. Javatpoint is best resource to learn it."
res = re.findall(r"\.", str1)
print(res)
输出:
['.', '.']
因为我们可以看到,它返回了包含两个点(.)的列表。
. Dot元字符
.点元字符表示除换行符(\n)之外的任何字符串字符。它可以包含大写或小写字母,符号,如美元符号($),井号(#),感叹号(!),问号(?)或冒号(:),数字0到9,包括空格。
让我们来看下面的示例。
示例
import re
given_string = "Peter likes to \n roam on the road at night"
# dot(.) metacharacter to match any character
result_match = re.search(r'.', given_string)
print(result_match.group())
# .+ to match any string except newline
result_match = re.search(r'.*', given_string )
print(result_match.group())
given_string1 = "Peter's mobile number is - 4564\n67"
result_match1 = re.search(r'.+', given_string1 )
print(result_match1.group())
输出:
P
Peter likes to
Peter's mobile number is - 4564
胡萝卜符号
胡萝卜符号返回与开头匹配的字符。例如 – 如果我们想要从字符串中获取前五个单词,我们会使用脱字符 (^) 元字符。让我们理解以下示例。
示例
import re
given_string = "Peter likes to \n roam on the road at night"
# dot(.) metacharacter to match any character
result_match = re.search(r'^\w{5}', given_string)
print(result_match.group())
输出:
Peter
在上面的代码中,我们使用了\w特殊序列,它匹配任何小写字母、大写字母、数字和下划线字符。花括号内的五表示该字母数字字符应该恰好出现五次。
插入符(^)用于在每一行开头匹配模式
我们只能在单行字符串的开头使用插入符元字符,因为它不用于多行匹配。
但是,通过re.M标志的帮助,我们可以在每一行上使用插入符。让我们理解下面的示例。
例如 –
import re
given_string = "Peter likes to \nroam on the road at night \nalso likes to eat ice-creame"
# dot(.) metacharacter to match any character
result_match = re.search(r"^\w{5}", given_string, re.M)
print(result_match.group())
$ 美元元字符
这个元字符与美元符号($)相反。它匹配字符串的末尾。在以下示例中,我们将匹配字符串末尾的冰淇淋。
示例
import re
given_string = "Peter likes to \nroam on the road at night \nalso likes to eat ice-cream"
# dot(.) metacharacter to match any character
result_match = re.search(r"\w{6}$", given_string, re.M)
print(result_match.group())
输出:
cream
*
星号元字符
它是正则表达式模式中最受欢迎和广泛使用的元字符之一。星号(*
)表示重复0次或多次,意味着它是一种贪婪的重复。下面的示例演示了使用星号(*
)元字符匹配所有数字的情况。
given_string = "Numbers are 1234, 8061,14567, 70453"
需要匹配的模式是\d\d*
观察到我们需要匹配两个连续的\d(代表任何数字)。需要记住的是模式末尾的*
表示前面的表达式出现零次或多次。在这种情况下,我们将表达式前置为最后一个\d,而不是全部两个\d。我们可以根据需要设置上限,但下限为零。
让我们理解以下示例。
示例
import re
given_string = "Numbers are 1234, 8061,14567, 70453"
# dot(.) metacharacter to match any character
result_match = re.findall(r"\d\d*", given_string)
print(result_match)
输出:
['1234', '8061', '14567', '70453']
加号元字符
它是正则表达式模式中另一个受欢迎且广泛使用的元字符。它表示重复一次或多次,重复次数可以很多。这意味着它是贪婪的重复。换句话说,前一个表达式会重复1次或更多次。
这里要匹配的模式是\d\d+。
我们可以得到以下可能的模式匹配:
- 我们可能会得到一个重复的两位数。
- 我们可能会得到一个三位数或两次重复最后一个\d。
- 我们也可能得到一个四位数。
让我们来理解以下示例。
示例
import re
given_string = "Numbers are 5, 34, 1234, 8061,14567, 70453"
# dot(.) metacharacter to match any character
result_match = re.findall(r"\d\d+", given_string)
print(result_match)
输出:
['34', '1234', '8061', '14567', '70453']
我们获取比赛结果列表。
问号?元字符
问号?
元字符表示前面的字符或表达式只重复零次或一次。重复限制在两端。在下面的示例中,我们将使用问号?与星号*和加号+元字符进行比较。
要匹配的模式是/d/d/d/d?。我们包含了四个字符,这意味着匹配至少应该有四个数字。
让我们理解以下示例。
示例
import re
given_string = "Numbers are 5, 34, 1234, 8061,14567, 70453"
# dot(.) metacharacter to match any character
result_match = re.findall(r"\d\d\d\d?", given_string)
print(result_match)
输出:
['1234', '8061', '1456', '7045']
管道(|)元字符
管道(|)元字符表示匹配字符的可选项。让我们了解以下示例。
示例
given_string = "This is my number."
# dot(.) metacharacter to match any character
result_match = re.search(r"i|n", given_string)
print(result_match)
替换组的实用性源于它们作为重复单位的能力。
结论
元字符在解决Python正则表达式现实问题中起着重要作用,它们有很广泛的应用。在本教程中,我们几乎包含了每个元字符的适当解释和编码示例。