匹配从THIS开始直到THAT正则表达式的字符串

时间:2014-03-07 06:34:52

标签: python regex

这是我的文件内容。

Whatever conent goes here
# --------------- POINT OF INTEREST BEGIN ------------------- #

<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.1.2">
    <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
        <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:exif="http://ns.adobe.com/exif/1.0/" xmp:ModifyDate="2014-03-06T12:39:48+05:00" exif:DateTimeOriginal="2014-03-05T18:26:01+05:00">
            <dc:creator>
                <rdf:Seq>
                    <rdf:li>Picasa</rdf:li>
                </rdf:Seq>
            </dc:creator>
        </rdf:Description>
    </rdf:RDF>
</x:xmpmeta>
# --------------- POINT OF INTEREST ENDS ------------------- #
Whatever content goes here

这是我想要实现的目标。 我希望匹配<x:xmpmeta and选择整个文件路径直到</x:xmpeta> 我很难以下面的形式翻译正则表达式。

"Start from <x:xmpmeta and whatever comes after that including \r\n untill </x:xmpmeta>"

我如何在Regex中翻译它?

1 个答案:

答案 0 :(得分:1)

如果您没有嵌套在其他<x:xmpmeta>元素中的任何其他<x:xmpmeta>元素,这非常简单:

<x:xmpmeta[\w\W]*?</x:xmpmeta>

包含单词character class及其否定字符类的字符集[\w\W]是匹配所有内容的简单方法,包括换行符。实际上,如果你想出于某种原因,你可以用任何其他字符类及其否定类替换它,例如[\s\S]

?*之后具有正则表达式非常重要,因为如果您在代码中稍后有另一个<x:xmpmeta></x:xmpmeta>块,则单个匹配将从第一个,继续通过结束标记,抓住中间的所有内容,并且只停留在</x:xmpmeta>的最后一个实例。