正则表达式在vim中插入空格

2024-02-14

我是一个正则表达式超级菜鸟(刚刚阅读了我的第一篇关于它们的文章),同时致力于更好地使用 vim。我想使用正则表达式来搜索冒号的所有实例:后面没有空格并且insert一个空间between这些冒号及其后面的任何字符。

如果我从以下开始:

foo:bar

我想结束

foo: bar

我已经到达%s/:[a-z]但现在我不知道接下来的部分要做什么%s陈述。

另外,我该如何更改:[a-z]声明以确保它捕获任何不是空格的内容?


:%s/:\(\S\)/: \1/g

\S匹配任何非空白字符,但您需要记住该非空白字符是什么。这就是\(\)做。然后您可以使用它来引用它\1在替换中。

所以你匹配一个:,一些非空白字符,然后将其替换为:、空格和捕获的字符。


更改此设置以仅在只有一个时修改文本:相当简单。正如其他人所建议的,使用一些零宽度断言将会很有用。

:%s/:\@!<:[^:[:space:]]\@=/: /g

  • :\@!<匹配任何非:,包括行的开头。这是否定前瞻/后瞻断言的一个重要特征。它并不要求实际上有一个角色,只是没有一个角色:.

  • :匹配所需的冒号。

  • [^:[:space:]]引入了更多正则表达式概念。

    • 外层[]是一个集合。集合用于匹配其中列出的任何字符。然而,领先的^否定该匹配。所以,[abc123]将匹配a, b, c, 1, 2, or 3, but [^abc123]匹配除这些字符之外的任何字符。

    • [:space:]是一个字符类。字符类只能在集合内使用。[:space:]毫不奇怪,意味着任何空白。在大多数实现中,它与 C 库的结果直接相关isspace功能。

    将所有这些结合在一起,该集合意味着“匹配任何不是:或空白”。

  • \@=是积极的前瞻断言。它适用于前一个原子(在本例中为集合),意味着该集合是模式成功匹配所必需的,但不会成为被替换文本的一部分。

因此,每当模式匹配时,我们只需替换:与它本身和一个空间。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

正则表达式在vim中插入空格 的相关文章

  • 如何使用 Vim 和 Eclipse 提高 PHP5.3 项目的工作效率(可能使用 Eclim 与 Zend Studio 集成)

    在开发应用程序时 我总是努力提高生产力 在过去的几年里 我可以说我在提高生产力方面取得了良好的进展 但我仍然发现我需要更多的工具或方法 我需要更快地编辑并学习盲打 目前正在过程中 因此我发现需要转向 Vim 现在已经一年多了 我已经放弃了
  • nginx位置正则表达式,匹配多次

    如何在 nginx 位置正则表达式中多次匹配 看来 x x 语法永远不起作用 例如 location abc w 1 3 从来不工作 您必须引用包含以下内容的位置 or 人物 location abc w 1 3 否则 nginx 将其解析
  • 以点作为分隔符分割字符串

    我想知道我是否要在一个字符串上分割字符串 正确的方式 我的代码是 String fn filename split return fn 0 我只需要字符串的第一部分 这就是我返回第一项的原因 我问这个是因为我在 API 中注意到 意味着任何
  • 正则表达式最小值4 个字符,最多 11 个,允许空格和特殊字符

    我在 RegularExpressionValidator NET 控件上有一个正则表达式 w 4 11 工作正常 它允许字符串长度在 4 到 11 之间 我希望它允许空格和特殊字符 例如 丹麦语字符 有什么建议么 怎么样 4 11 或者只
  • 为什么正则表达式中有四个反斜杠?

    d 1 2 我有上面的正则表达式 我知道字符串解析器会删除两个反斜杠 留下我们 d 以1为元字符 无关的功能是什么 我以前没有正则表达式的经验 或者字符串模式本身就是 反斜杠 最多出现两次的整数 我错过了什么吗 反斜杠转义其他反斜杠以及特殊
  • 递归BBCode解析

    我正在尝试解析脚本中的 BBCode 现在 它可以无缝工作 直到我尝试缩进不仅仅是粗体或下划线的 BBCode 例如剧透 网址 字体大小等 然后它就会搞砸 这是我的代码 function parse bbcode text global d
  • 正则表达式贪婪匹配未按预期工作

    我有一个非常基本的正则表达式 我只是不明白为什么它不起作用 所以问题分为两部分 为什么我当前的版本不起作用以及正确的表达方式是什么 规则非常简单 必须至少包含 3 个字符 如果 字符是第一个字符 则必须至少包含 4 个字符 因此 以下情况应
  • 使用起始字符串和结束字符串从长字符串中提取子字符串?

    我有这个长字符串 它是一个长的连续字符串 Home address H NO 12 SECTOR 12 GAUTAM BUDH NAGAR NOIDA 121212 UTTAR PRADESH INDIA 911112121212 Last
  • 匹配 JavaScript RegEx 中的不可见字符

    我有一些包含不可见字符的字符串 但它们位于可预测的位置 通常 围绕我想要提取的文本片段 然后在第二次出现之后我想保留文本的其余部分 我似乎不知道如何关闭隐形字符 and将它们从我的结果中排除 为了匹配隐形 我一直在使用这个正则表达式 xA0
  • 如何在正则表达式中区分数字和ip地址?

    例如 如果我们查看 5 56 和 183 55 0 144 基本上 当你做这样的事情时 d d 它匹配 5 56 189 55 和 0 144 有没有办法通过正则表达式仅匹配数字而不匹配 ip 地址的部分 我尝试使用前瞻 但我不知道它应该是
  • 仅匹配空格或字符串开头/结尾之间的整数的正则表达式

    我目前正在使用该模式 b d b 用这些条目测试它 numb3r 2 3454 3 214 test 我只希望它捕获 2 和 3454 它非常适合捕获数字单词 除了边界标志 b 包括 作为一个单独的词考虑 我尝试排除句点 但在编写模式时遇到
  • 如何从 m3u 字符串中检索变量=“值”对

    我有 m3u 文件 其中包含类似示例的行 EXTINF 0 ExtFilter Viva group title Variedades tvg logo logo Viva png tvg name Viva 我在 PHP 中运行此命令但没
  • 使用 .htaccess 重定向到动态相对路径?

    是否可以使 htaccess 理解 动态相对路径并正确重定向到它们 我的设置如下 http domain com htroot aaa xyz http domain com htroot bbb xyz http domain com h
  • 如何使用 php 从字符串中提取日期

    我需要从字符串中提取日期 下面是我的代码和字符串 str Updated status to Masters Software Engineering Enrolled Documents to Send on 03 06 2014 14
  • 将字符串分解为标记,保持引用的子字符串完整

    我不知道我在哪里看到它 但是谁能告诉我如何使用 php 和 regex 来完成这个任务 this is a string that has quoted text inside 我希望能够像这样爆炸它 0 this 1 is 2 a 3 s
  • Golang 正则表达式命名组和子匹配

    我正在尝试匹配正则表达式并获取匹配的捕获组名称 当正则表达式仅与字符串匹配一次时 这是有效的 但如果它与字符串匹配多次 SubexpNames不返回重复的名称 这是一个例子 package main import fmt regexp fu
  • 需要正则表达式(使用 C#)将所有空白压缩为单个空白

    我需要将文档中的多个空格替换为单个空格 每次迭代 无论它们是空格 制表符还是换行符 任何类型的空格的任何组合都需要被截断为单个空格 假设我们有字符串 Hello t t n t n world 其中 t 和 n 分别代表制表符和换行符 那么
  • 需要 RegEx 返回第一段或前 n 个单词

    我正在寻找一个正则表达式来返回段落中的前 n 个单词 或者如果该段落包含少于 n 个单词 则返回完整的段落 例如 假设我最多需要前 7 个单词 p one two p
  • 使用 Python 从网站下载所有 pdf 文件

    我遵循了几个在线指南 试图构建一个可以识别并从网站下载所有 pdf 的脚本 从而避免我手动执行此操作 到目前为止 这是我的代码 from urllib import request from bs4 import BeautifulSoup
  • 正则表达式允许零,只要它不是第一个数字[重复]

    这个问题在这里已经有答案了 昨天我在这里发布了一个问题正则表达式允许 null 或 1 到 9 数字 https stackoverflow com questions 40354842 regular expression allow n

随机推荐