📅  最后修改于: 2023-12-03 15:29:08.199000             🧑  作者: Mango
正则表达式是一种用于匹配文本的工具,它可以使程序员在处理字符串时更加高效和便捷。正则表达式通常使用特殊字符和语法,用于指定文本的模式和规则,以及匹配和替换操作。
正则表达式的基本语法通常包括以下五个元字符:
.
表示匹配任意单个字符,除了换行符import re
pattern = "h.t"
text = "hot hAt hit hat h0t"
match = re.findall(pattern, text)
print(match) # ['hot', 'hit', 'hat']
*
表示匹配前面的字符零次或多次import re
pattern = "h.*t"
text = "hot hAt hit hat h0t"
match = re.findall(pattern, text)
print(match) # ['hot hAt hit hat h0t']
+
表示匹配前面的字符至少一次或更多次import re
pattern = "h.+t"
text = "hot hAt hit hat h0t"
match = re.findall(pattern, text)
print(match) # ['hot', 'hit', 'hat', 'h0t']
?
表示匹配前面的字符零次或一次import re
pattern = "h.?t"
text = "hot hAt hit hat h0t"
match = re.findall(pattern, text)
print(match) # ['hot', 'hAt', 'hit', 'hat', 'h0t']
[]
表示匹配方括号中的任意一个字符import re
pattern = "[hxyz]at"
text = "hot hAt hit hat h0t"
match = re.findall(pattern, text)
print(match) # ['hat', 'hat']
正则表达式还有更多高级用法可以满足不同的需求,例如:
()
)可以将匹配的内容提取出来import re
pattern = "(\d{4})-(\d{2})-(\d{2})"
text = "Today is 2022-08-31, and tomorrow is 2022-09-01."
match = re.findall(pattern, text)
print(match) # [('2022', '08', '31'), ('2022', '09', '01')]
(?:)
)可以排除某些内容不在匹配的结果中import re
pattern = "\d{3}-\d{2}-(?:\d{4})" # 匹配 xxx-xx-xxxx 格式的社保号码,但不包含年份信息
text = "Tom's social security number is 123-45-6789 and the year is 1995."
match = re.findall(pattern, text)
print(match) # ['123-45-6789']
(?=)
、(?!)
、(?<=)
、(?<!)
)可以进行更加精准的匹配import re
pattern1 = "[a-z]+(?=\s+is)" # 匹配以 is 为结尾的单词前的小写字母单词
text1 = "My favorite color is blue."
match1 = re.findall(pattern1, text1)
print(match1) # ['favorite']
pattern2 = "(?<!not\s)[a-z]+(?=\s+color)" # 匹配前面不是 not 的单词后的小写字母单词
text2 = "My favorite color is blue, but it's not his favorite color."
match2 = re.findall(pattern2, text2)
print(match2) # ['favorite', 'his']
在 Vim 中,正则表达式可以用于编辑器的搜索、替换等操作。例如:
搜索一个以字母 "a" 开头的单词:/\wa
将所有以 "a" 结尾的单词替换为 "b"::%s/a\b/b/g
删除所有包含数字的行::g/\d/d
在所有包含 "python" 的行前添加 "# "::g/python/s/^/# /
正则表达式是程序员必备的工具之一,学习并灵活掌握正则表达式的基本语法和高级用法,可以让我们在字符串处理中得心应手、高效便捷。在 Vim 中使用正则表达式可以让我们更加方便地编辑文本。