繁体   English   中英

我如何在x和y中正则表达式搜索a,并且仅当在x中找到a时才包括替换y?

[英]How do I regex search in x and y for a, and only include the replacement of y if a was found in x?

我需要搜索更大的文本文件。

这是我正在搜索的示例。

https://pastebin.com/JFVy2TEt

recipes.addShaped("basemetals:adamantine_arrow", <basemetals:adamantine_arrow> * 4, [[<ore:nuggetAdamantine>], [<basemetals:adamantine_rod>], [<minecraft:feather>]]);

我需要在第一个参数中查找与特定部分匹配的行。

例如,上一行中的“ _arrow”部分。

并删除第一个参数中与“ _arrow”不匹配的所有内容。

所有这些人的论点都不尽相同。

上面一行中“贱金属:金刚烷”的位置也有不同的名称。

而且,由于进一步的论点都是不同的,所以只有在第一件事匹配时,我才能继续思考如何包括结尾。

编辑:最终目标是简化我的3k +行文本文件的排序。

基本,铁匠,木匠,厨师,化学家,工程师,农夫,珠宝商,法师,梅森,抄写员,裁缝

我认为您要尝试的是通过删除不符合设置条件的行来过滤文本文件。 我为此解决方案选择了Atom文本编辑器(因为我正在运行Windows操作系统,并且无法安装gedit,因此我想确保您有一个有效的示例)。

要只删除没有以_arrow结尾的第一个参数的_arrow ,可以执行(?!recipes\\.addShaped\\("[^"]+_arrow")recipes.+\\r?\\n?并且不进行任何替换。

注意:Atom的低正则表达式支持使此任务变得更加困难。 在更受支持的环境中,我的答案可能是^recipes\\.addShaped("[^"]+(?<!_arrow)").+\\r?\\n? (使用多行模式)。

另外,请阅读“有人回答我的问题该怎么办?”

正则表达式解释:

  • (?! )是一个否定的超前行为 ,它会窥视后续文本以确保其在第一个参数的末尾不包含“ _arrow ”。
  • \\. 是一个逃脱的文字时期
  • [^"]是一个字符类,表示不是 "的字符。
  • +是一个量词,它告诉正则表达式尽可能多地匹配前面的字符或子表达式,至少要匹配一次。
  • . 是通配符,代表任何字符
  • \\r?\\n? 用于匹配任何类型的换行符,并带有? 量词,使每个字符都可选。
  • 其他一切都是文字字符; 它代表了它完全匹配的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM