📜  0 个或多个正则表达式 vim (1)

📅  最后修改于: 2023-12-03 15:29:08.199000             🧑  作者: Mango

正则表达式介绍

正则表达式是一种用于匹配文本的工具,它可以使程序员在处理字符串时更加高效和便捷。正则表达式通常使用特殊字符和语法,用于指定文本的模式和规则,以及匹配和替换操作。

基本语法

正则表达式的基本语法通常包括以下五个元字符:

  1. . 表示匹配任意单个字符,除了换行符
import re

pattern = "h.t"
text = "hot hAt hit hat h0t"
match = re.findall(pattern, text)
print(match)  # ['hot', 'hit', 'hat']
  1. * 表示匹配前面的字符零次或多次
import re

pattern = "h.*t"
text = "hot hAt hit hat h0t"
match = re.findall(pattern, text)
print(match)  # ['hot hAt hit hat h0t']
  1. + 表示匹配前面的字符至少一次或更多次
import re

pattern = "h.+t"
text = "hot hAt hit hat h0t"
match = re.findall(pattern, text)
print(match)  # ['hot', 'hit', 'hat', 'h0t']
  1. ? 表示匹配前面的字符零次或一次
import re

pattern = "h.?t"
text = "hot hAt hit hat h0t"
match = re.findall(pattern, text)
print(match)  # ['hot', 'hAt', 'hit', 'hat', 'h0t']
  1. [] 表示匹配方括号中的任意一个字符
import re

pattern = "[hxyz]at"
text = "hot hAt hit hat h0t"
match = re.findall(pattern, text)
print(match)  # ['hat', 'hat']
进阶用法

正则表达式还有更多高级用法可以满足不同的需求,例如:

  1. 分组(())可以将匹配的内容提取出来
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')]
  1. 非捕获分组((?:))可以排除某些内容不在匹配的结果中
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']
  1. 向前、向后查找((?=)(?!)(?<=)(?<!))可以进行更加精准的匹配
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 中使用正则表达式

在 Vim 中,正则表达式可以用于编辑器的搜索、替换等操作。例如:

  1. 搜索一个以字母 "a" 开头的单词:/\wa

  2. 将所有以 "a" 结尾的单词替换为 "b"::%s/a\b/b/g

  3. 删除所有包含数字的行::g/\d/d

  4. 在所有包含 "python" 的行前添加 "# "::g/python/s/^/# /

总结

正则表达式是程序员必备的工具之一,学习并灵活掌握正则表达式的基本语法和高级用法,可以让我们在字符串处理中得心应手、高效便捷。在 Vim 中使用正则表达式可以让我们更加方便地编辑文本。