如何在多行String中捕获某些字符和字符串之间的字符串?蟒蛇

时间:2016-08-02 15:32:08

标签: python regex python-2.7 python-3.x

假设我们有一个字符串

string="This is a test code [asdf -wer -a2 asdf] >(ascd asdfas -were)\

 test \

(testing test) test >asdf  \

       test"

我需要在字符>之间获取字符串和字符串“test”。

我试过

re.findall(r'>[^)](.*)test',string, re.MULTILINE )

但是我得到了

(ascd asdfas -were)\ test \ (testing test) test >asdf.

但是我需要:

(ascd asdfas -were)\ 

asdf

如何获得这两个字符串?

1 个答案:

答案 0 :(得分:2)

怎么样:

import re

s="""This is a test code [asdf -wer -a2 asdf] >(ascd asdfas -were)
test
(testing test) test >asdf
test"""

print(re.findall(r'>(.*?)\btest\b', s, re.DOTALL))

输出:

['(ascd asdfas -were)\n', 'asdf\n']

这种模式中唯一有趣的部分是:

  • .*?,其中?生成.*" ungreedy",否则您只有一个长匹配而不是两个。
  • 使用\btest\b作为"结尾"标识符(请参阅下面的Jan&#39评论)而不是testWhere
      

    \b   匹配空字符串,但只匹配单词的开头或结尾....

注意,它可能正在re.DOTALL上阅读,因为我认为真的 你想要什么。 DOTALL允许.个字符包含换行符,而MULTILINE允许锚点(^$)匹配行的开头和结尾,而不是整个字符串。考虑到你不使用锚,我认为DOTALL更合适。