一点背景: 我在一家多语种通信公司工作,我们正在使用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”,找到引号之间的大部分术语,但不是全部:例如,找不到“弯曲方法”。
我错过了什么?任何帮助或意见将不胜感激!
答案 0 :(得分:0)
根据您的最后答案,这是一个可以帮助您的正则表达式:
(?<=<entry)[^>]+>[^<>]*?(".+?")[^<>]*?(?=<\x2Fentry>)
我假设您在直接引用之间有一系列单词,并且<entry>
节点内没有回车符换行。