如何使用Vim提取与正则表达式匹配的文本



我想用Vim从一段文本中提取一些数据。输入看起来是这样的:

72" title="(168,72)" onmouseover="posizione('(168,72)');" onmouseout="posizione('(-,-)');">>
72" title="(180,72)" onmouseover="posizione('(180,72)');" onmouseout="posizione('(-,-)');">>
72" title="(192,72)" onmouseover="posizione('(192,72)');" onmouseout="posizione('(-,-)');">>
72" title="(204,72)" onmouseover="posizione('(204,72)');" onmouseout="posizione('(-,-)');">>

我需要提取的数据包含在输入的CCD_ 1部分中。特别是,我对提取括号中的坐标对很感兴趣。

我曾想过使用Vim首先删除title="之前的所有内容,但我并不是一个真正的正则表达式专家,所以我要问你。如果有人有任何提示,请告诉我!:(

这将用制表符分隔的每行坐标列表替换每行:

:%s/.* title="((d+),(d+))".*/1t2

这个任务可以用一个简单得多的解决方案来实现,只需使用普通命令:

:%normal df(f)D

这意味着:

  1. %-在所有文件行上运行正常命令
  2. normal-在正常模式下运行以下命令
  3. df(-删除所有内容,直到找到括号(包括括号(
  4. f)-将光标移动到(
  5. D-删除所有内容,直到行尾

您也可以设置一个范围,例如,从第5行运行到第10行:

:5,10normal df(f)D

如果您想要针对这种一次性情况的特别解决方案,只需使用CTRL-v选择视觉块可能会更快。这将允许您选择任意一列文本(在您的情况下,是包含title="(X,Y)"的列(,然后可以像往常一样使用y复制该列。

您可以匹配title=((中的所有内容,并丢弃其他内容,如下所示:

:%s,.*title="((.*))".*,1,

相关内容

  • 没有找到相关文章

最新更新