一个匹配两个长字符串的正则表达式,忽略其间的所有内容

时间:2014-06-17 21:38:56

标签: regex notepad++

我正在搜索一个150万行的Premiere Pro项目,搜索与我的某个音频过滤器匹配的任何文本并设置为单声道。 我要搜索的文字以<ChannelType>标记开头,以<FilterMatchName>标记结尾。所以它看起来像这样

<ChannelType>0</ChannelType>
            <FrameRate>5292000</FrameRate>
        </AudioComponent>
        <FilterPreset>0</FilterPreset>
        <OpaqueData Encoding="base64" Checksum="53060659">AAAAAD8L8lo+AUr+Pac1NjwTmoUAAAAAP0uQDD37nIg9ui6MPjwU5j+AAAA+C/JaAAAAAD8qqqsAAAAAP4AAAD92L8w9py8FAAAAAHNvZnQgY29tcHJlc3Npb24AIiBkZWZhdWx0PSIwIiBzdGVwPSIxIiBtaW49IjAiIG1heD0iMSIvPgoJICA8Zmw=</OpaqueData>
        <FilterIndex>-1</FilterIndex>
        <FilterMatchName>1094998321 Dynamics1</FilterMatchName>

如果我在Word文档中,我只会做一个查找

<ChannelType>0</ChannelType>*<FilterMatchName>1094998321 Dynamics1</FilterMatchName>

我和Regex很糟糕。我希望有人可以帮助我。我尝试的所有内容要么与任何内容都不匹配,要么匹配文档中的所有内容。我正在使用Notepad ++。

2 个答案:

答案 0 :(得分:1)

由于您使用的是Notepad ++,因此您可以访问PCRE正则表达式。这个将获得<ChannelType></FilterMatchName>

之间的所有文字
(?s)<ChannelType>.*?</FilterMatchName>
  • (?s)允许.匹配换行符
  • 匹配<ChannelType>后,.*?懒惰地匹配所有字符......
  • 我们匹配的结束</FilterMatchName>

如果您有任何疑问,请与我们联系。 :)

答案 1 :(得分:0)

您使用的是哪种正则表达式(哪种语言/库)? 基本上,您可以在正则表达式中使用.*代替*。如果你的文字很长,如果你的重新实现允许,最好使用Reluctant量词[1]。

这是一个很好的网站,可以比较不同的实现和教程: http://www.regular-expressions.info

[1] http://docs.oracle.com/javase/tutorial/essential/regex/quant.html