假设我们有一个字符串
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
如何获得这两个字符串?
答案 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评论)而不是test
。 Where,
\b
匹配空字符串,但只匹配单词的开头或结尾....
注意,它可能正在re.DOTALL
上阅读,因为我认为真的 你想要什么。 DOTALL
允许.
个字符包含换行符,而MULTILINE
允许锚点(^
,$
)匹配行的开头和结尾,而不是整个字符串。考虑到你不使用锚,我认为DOTALL
更合适。