提取目录中所有文件的两个关键字之间的字符串

时间:2018-09-15 11:12:38

标签: regex xml search

我在以下文件夹中有一堆.xml文件: “ C:\ Users \ Kavinda JD \ Desktop \ Manual \ XMLs \ Output”

我希望在整个文件夹中搜索所有.png文件引用。 例如,一个.xml文件具有以下内容:

        <li class="list1-item clearer">
            <div class="ie8fixer" />
            <p class="step2-list1-nonmark-heading">The following image is an example.</p>
            <div class="bigImage"><img src="../image/vl7ie02.png" alt="VL7IE02" class="figure-graphic--bigImage" />
            </div>
        </li>

我需要一些将通过每个.xml文件并选择.png文件名称的内容。 因此,对于上面的示例,输出为:

vl7ie02.png

我已经尝试使用Notepad ++搜索字符串“ .png”,但是对于某些.xml文件,一行包含很多信息,并且png文件名出现在标签的末尾。因此,即使有匹配项,Notepad ++也不会在输出窗口中显示此内容。然后,我必须转到文件和相关行,然后从那里获取它。

我真的不想这样做,因为目录中有超过6000个xml文件!

2 个答案:

答案 0 :(得分:0)

使用grep -Eo "[^/]+\.png" *.xml

如果您使用的是Windows,请参见Grep for Windows

答案 1 :(得分:0)

使用以下正则表达式:

img.*?src=".*(?<="|\/)(\w+\.(?:png|jpg|jpeg|gif))"

更详细的解释在[Regex101] [2]上。

  • 请注意,图像路径始终位于img标签和src属性中。
  • 还请注意,src属性内容始终包裹在引号"之间。
  • (?<="|\/)是一个正向后视,表示图像名称和扩展名必须在引号字符"或反斜杠/后( 逃脱)。
  • \w+\.将文件名与点匹配。如果你想前。文件名中的空格,请使用.+
  • (?:png|jpg|jpeg|gif)是可能的扩展名。如果您不关心它们,请改用\w+
  • 在捕获组括号(\w+\.(?:png|jpg|jpeg|gif))内用点号和扩展名包裹文件名。