我对python和编程整体都很陌生。只是学习我的ABC。比方说,我有一个像这样的字符串。
s = "DEALER:'S up, Bubbless? BUBBLES: Hey. DEALER: Well, there you go. JUNKIE: Well, what you got?DEALER: I got some starters.";
我想要在遇到一个带有大写和冒号(:)的单词时结束字符串。然后创建一个存储另一个字符串的新字符串。对于上面的字符串,我会得到
s1 = "DEALER:'S up, Bubbless?"
s2 = "BUBBLES: Hey."
s3 = "DEALER: Well, there you go."
这是我的正则代码
mystring = """
DEALER: 'S up, Bubbless?
BUBBLES: Hey.
DEALER: Well, there you go.
JUNKIE: Well, what you got?
DEALER: I got some starters. """
#[A-Z]+:.*?(?=[A-Z]+:|$)
#p = re.compile('([A-Z]*):')
p = re.compile('[A-Z]+:.*?(?=[A-Z]+:|$)')
s = set(p.findall(mystring))
我如何通过它来获取每个字符串?它只获得第一个字符串(即经销商:'S up,Bubbless?)并停止。对不起,如果我听起来有点无能为力。有点新的编程。我一起学习实践
答案 0 :(得分:1)
由于它是一个多行字符串,您需要使用re.DOTALL
选项,如此
p = re.compile('[A-Z]+:.*?(?=[A-Z]+:|$)', re.DOTALL)
<强>输出强>
set(["DEALER: 'S up, Bubbless?\n",
'JUNKIE: Well, what you got?\n',
'DEALER: Well, there you go.\n',
'DEALER: I got some starters. ',
'BUBBLES: Hey.\n'])
制作'。'特殊字符匹配任何字符,包括a 新队;没有这个标志,'。'将匹配除换行符之外的任何内容。
因此,如果没有该选项,则.*?
与\n
不匹配。这就是为什么其他字符串都没有匹配的原因。