如何使用正则表达式查找和替换文本

如何使用正则表达式查找和替换文本

我有多行这样的行(包含多个随机数):

value:"200 text.text.text.text
value:"235437 text.text.11.text
value:"12835 text.text.17.text
value:"347783 text.text.text.text

我想删除空格前的所有内容 text.text.text.text

看起来像这样(我也想删除空格):

text.text.text.text
text.text.11.text
text.text.17.text
text.text.text.text

答案1

对于你的情况,有几个简单的解决方案。第一个解决方案仅使用基本正则表达式:

[\.\w]+$

这会捕获从末尾开始的每个单词字符\w或句点,当遇到任何其他类型的字符时停止。这是有效的,因为空格不是单词字符或句点。\.$

如果您想选择需要删除的区域,您只需使用:

.*

将其理解为匹配每个字符,.*直到最后一个空格。之所以匹配直到最后的空间,是因为恒星是贪婪的量词。这意味着它会匹配所有可以匹配的内容,然后开始根据需要返回字符,以便匹配其余的模式。要匹配到第一个空格,请使用.*?。星号旁边的问号使星号懒惰的。这意味着星号将匹配尽可能少的字符,以便表达式的下一部分能够找到匹配项。

但是,捕获组非常适合解决此类问题,即您希望删除行的一部分并保留其余部分。一个简单的公式是:

^(.*)pattern_to_remove(.*)$

然后你可以使用反向引用。这些存储捕获组(括号内的任何内容)从正则表达式转换为预设变量。在上述模式中,这将是\1\2$1$2取决于您使用的语言。这让我想到了可能对你的问题最简单的答案:

(.*)

第一个捕获组包含空格后的所有内容。这个正则表达式非常简单易读。移至第一个空格,然后捕获其后的所有内容(.*)

有关正则表达式的全面参考,请查看正则表达式信息这里是捕获组页面的链接。

答案2

  • Ctrl+H
  • 找什么:^\S+\h+
  • 用。。。来代替:LEAVE EMPTY
  • 查看 环绕
  • 查看 正则表达式
  • Replace all

解释:

^         # beginning of line
  \S+       # 1 or more non spaces
  \h+       # 1 or more horizontal spaces

截图(之前):

在此处输入图片描述

截图(之后):

在此处输入图片描述

相关内容