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

时间:2013-12-11 11:34:18

标签: regex replace

一点背景: 我在一家多语种通信公司工作,我们正在使用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”,找到引号之间的大部分术语,但不是全部:例如,找不到“弯曲方法”。

我错过了什么?任何帮助或意见将不胜感激!

1 个答案:

答案 0 :(得分:0)

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

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

描述

Regular expression visualization

演示

http://regex101.com/r/lX2cU3

讨论

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