[英]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>)
我假设您在直引号之间有一个单词系列,并且在<entry>
节点内没有回车符或换行符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.