首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用正则表达式在VSCode中搜索一组XML标记的多行内容

使用正则表达式在VSCode中搜索一组XML标记的多行内容
EN

Stack Overflow用户
提问于 2020-04-05 04:18:52
回答 2查看 991关注 0票数 0

我正在使用VSCode对XML文件进行全局搜索。在这些文件中有多个这些XML标记的实例:<translated></translated>。我需要找到在这些标记之间的任何一个连字符-的所有出现,其中这些标记的内容可以在多行上。

代码语言:javascript
复制
<translated>
    Content is here
    Could be on multiple lines
    The meeting could take 3-4 hours
</translated>

在上面的例子中,短语"3-4小时“中有一个连字符。我需要一个适用于VSCode的正则表达式,它可以查找所有连字符的事件,这些连字符恰好位于这些XML标记的集合中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-05 13:09:47

选项1(使用VS代码)

--一次只能匹配一个破折号,而不是所有的破折号。,这是因为将搜索限制在一组标记中,意味着每次只能进行一次传递。我本来打算删除这个答案,但如果这是唯一的答案,也许总比没有好。所做的工作是必须刷新搜索(在搜索框上方的按钮),并一次又一次地单击“替换”。如果有很多破折号,这将是恼人的,但总比没有答案。

我一直在使用,下面的内容似乎有效。

代码语言:javascript
复制
(<translated>(.|\n)*?)(-)((.|\n)*?<\/translated>)

假设您可能希望,例如,替换破折号,它可以添加回组1和4包装在任何新的文本.

代码语言:javascript
复制
$1 <yourTextHere> $4

示例:

在替换之前:

替换后(请注意,文件第一节中的3-4仅受影响,3 to 4未更改):

选项2/更新(使用Brackets.io)

虽然我不确定导致VSCode无法跨文件匹配的原因,但下面的regex在多个文件中使用括号(google Brackets.io) .

代码语言:javascript
复制
-(?=[^<]*?<\/translated>) 

您必须将所有文件放在一个文件夹中,然后打开该文件夹。然后在项目中搜索(Find > Find in files)。注意,它在屏幕截图中显示了在所有文件中找到的匹配。在所选文件t2 copy.txt的下面板中,它首先匹配在第6行,然后在第16行匹配,并且(正确)不匹配在第10行,因为它不包含在已翻译的标记集中。

票数 0
EN

Stack Overflow用户

发布于 2020-04-12 20:34:26

-(?=[^<]*?<\/translated>)在vscode中不工作的原因是它没有显式地包含换行符\n。尽管[^<]包含换行符,但实际上需要将\n写入regex,以便触发多行选项。为什么会这样呢?

参见https://github.com/microsoft/vscode/issues/75265,它使用类似的正则表达式。这个问题主要是出于性能原因,导致阅读;>}很有趣。

所以简单地使用这个

-(?=[^<]*?\n*<\/translated>)

在vscode工作!

-(?=[^<]*?\n<\/translated>)也适用于您,除非您有单行块,例如:

代码语言:javascript
复制
<translated>Con-tent is he-re</translated>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61038007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档