正则表达式 – 任意字符
正则表达式可以用来匹配各种字符串模式。其中,”.”字符可以匹配任意字符,代替了所有可能出现的字符。
比如有以下字符串:
s1 = "abacabbccdcd"
s2 = "kg-fkhLJ&)Kf-8@3pf"
我们想要匹配到字母“a”和“c”间的所有字符,可以使用正则表达式中的“.”字符。
import re
pattern = r"a.c"
print(re.findall(pattern, s1))
# 输出 ['aba', 'acc']
print(re.findall(pattern, s2))
# 输出 ['fLJ', ')Kf']
正则表达式中的“.”是一个通配符,表示可以匹配任何单个字符。整个正则表达式“a.c”表示匹配以字母”a”开头,以字母”c”结尾,在其间可以匹配到一个任意的字符。(注:这里的“.”需要使用转义字符“.”来代表实际含义)
如果想要匹配多个任意字符,可以使用“.”和“”组合。其中,星号()表示匹配前面的表达式零次或多次。比如,我们可以使用正则表达式”.*”匹配任意数量的字符。
import re
pattern1 = r"k.*f"
print(re.findall(pattern1, s2))
# 匹配到第一个k到最后一个f的任意字符
# 输出 ['khLJ&)Kf-8@3pf']
pattern2 = r".*"
print(re.findall(pattern2, s1))
# 匹配任意字符
# 输出 ['abacabbccdcd', '']
可以看到,第一个正则表达式匹配第二个字符串中的从“k”到“f”的所有字符,而第二个正则表达式则匹配了整个字符串。由于星号(*)可以匹配任何数量次字符,因此它也可以匹配到零个,因此输出结果中存在一个空字符串。
正则表达式中的“.”字符适用于匹配未知的单个字符,但有时候我们也需要匹配特定的字符。如果我们想要匹配一个特定的字符,而不是任何字符,可以使用反斜杠来转义这个字符。
比如,在下面的例子中,我们想要匹配任何含有“w”和“z”字符的单词。
import re
pattern = r"\b\w*[wz]\w*\b"
text = "the quick brown dog jumps over the lazy dog"
print(re.findall(pattern, text))
# 匹配任何含有“w”和“z”字符的单词
# 输出 ['brown', 'jumps', 'lazy']
在这个例子中,“\w”可以匹配任何单词字符(包括字母、数字和下划线)。我们用星号()将其与“[wz]”(匹配任何含有“w”或“z”的字符)和另一个星号()(匹配在这两个字符之间的任何数量的字符)组合。最后,使用\b将匹配限制为一个单词。
结论
在正则表达式中,“.”可以匹配任何单个字符。星号(*)扩展了这个概念,允许匹配包含任意数量次的字符。在需要匹配特定字符时,可以使用反斜杠来转义这些字符。