模式匹配RegEx Python之间的文本

时间:2015-12-24 11:39:52

标签: python regex

我需要一些以下模式的帮助,我现在正在奋斗很多个小时。 我的文字如下:

<<12/24/2015 00:00  userrrr>>
********** Text all char and symbols ************
<<12/24/2015 00:00 CET userr>>
Text all char and symbols
<<12/24/2015 00:00 GMT+1 userrrr>> Text in same line
<<12/24/2015 00:00 CET userrr>>
Text all characters and symbols
<<12/24/2015 00:00 GMT+1 userrrrrrr>> Text in same line
More Text all characters and symbols
<<12/24/2015 00:00 CET userrrrr>>
More text all characters and symbols
<<12/24/2015 00:00 CET userrrrrrrrrrr>>
More Text all characters and symbols

使用模式:

(\<<)(\d{2}/\d{2}/\d{4}\s\d{2}:\d{2})(.*?(?=>>))(>>)

日期时间和箭头之间的所有内容都是正确匹配的。不幸的是, 我找不到在模式之间提取文本的方法。最终的组应该看起来像(left_arrows),(datetime),(user),(right_arrows),(text)。我得到的更接近的是使用:

(\<<)(\d{2}/\d{2}/\d{4}\s\d{2}:\d{2}\s\D{3}.*?(?=\s))\s(.*?(?=>>))(>>)((?s).*?(?=<<\d{2}/\d{2}))

但它与第一​​个和最后一个不匹配。Click Here to check the result(pythex.org)

2 个答案:

答案 0 :(得分:1)

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script>
    $(function() {
        $("form").submit(function(event) {
           alert("submit");
        });
    });
</script>

您需要为最后一行提供(\<<)(\d{2}/\d{2}/\d{4}\s\d{2}:\d{2}\s\D{0,3}.*?(?=\s))\s(.*?(?=>>))(>>)((?s).*?(?=<<\d{2}/\d{2}|$)) ^^ 才能匹配。请参阅演示。

https://regex101.com/r/fM9lY3/51

答案 1 :(得分:0)

我认为最简单的方法是逐行检查文件并尝试将它们与不同的正则表达相匹配,一个用于标题行,一个用于文本行。但如果你真的需要一次性完成它,你可以这样做:

(\<<)(\d{2}/\d{2}/\d{4}\s\d{2}:\d{2})(.*?(?=>>))(>>)\n\*+([^\*]+)\*+\n