繁体   English   中英

搜索和替换正则表达式-过滤文件

[英]Search & replace regex - filtering files

背景知识:我在一家使用多语言沟通的公司工作,而我们正在使用CMS系统。 自上次更新以来,我从系统导出的所有文件都被元数据“污染”了,我不希望看到,使用或替换这些元数据。 为了过滤和更改一堆xml文件,我使用了Powergrep,它与正则表达式一起运行。

想让我的正则表达式查找,例如“没有汤匙”,“甲骨文”,“我知道功夫”和“弯曲方法”(全引号)并将其替换为“没有汤匙”,“甲骨文” ”,“我知道功夫”和“弯曲方法”(都用弯引号引起来)。

不希望它找到元数据"concept.dtd""map.dtd" 。以下几行是我的xml文件的第一行。 我想忽略的是这个"concept.dtd"

<?xml version="1.0" encoding="UTF-16" standalone="no"?>
<!DOCTYPE concept PUBLIC "-//OASIS//DTD DITA Concept//EN" "concept.dtd"[
]>
<?ish ishref="GUID-6B84EF92-DA99-4C54-BA91-FD0A113D4A96" version="1" lang="sv" srclng="en"?>

这是xml文件中间的某处

<row>
<entry colname="col1" valign="middle" align="left">"Bending method" </entry>
<entry colname="col2" valign="middle" align="left">another word</entry>
</row>

所以..这是原始正则表达式:

(?<!=)”\b(.+?)\b”(?! \[)

替代:

“1”

问题:由于元数据“ concept.dtd”和“ map.dtd”是文件的一部分,因此我不想替换引号,以便不更改任何关键内容。 所以我尝试重写正则表达式:

(?<!=)”\b(.+?[\.d])\b”(?! \[)

它几乎可以正常工作:跳过“ concept.dtd”和“ map.dtd”,找到引号之间的大多数术语,但不是全部:例如,找不到“弯曲方法”。

我想念什么? 任何帮助或意见将不胜感激!

根据您的最新答案,以下是一个可以帮助您的正则表达式:

(?<=<entry)[^>]+>[^<>]*?(".+?")[^<>]*?(?=<\x2Fentry>)

描述

正则表达式可视化

演示版

http://regex101.com/r/lX2cU3

讨论区

我假设您在直引号之间有一个单词系列,并且在<entry>节点内没有回车符或换行符。

暂无
暂无

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

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