遇到特定单词时拆分字符串

时间:2014-02-14 08:03:38

标签: python regex string string-matching

我对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?)并停止。对不起,如果我听起来有点无能为力。有点新的编程。我一起学习实践

1 个答案:

答案 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'])

引自re.DOTALL docs

  

制作'。'特殊字符匹配任何字符,包括a   新队;没有这个标志,'。'将匹配除换行符之外的任何内容。

因此,如果没有该选项,则.*?\n不匹配。这就是为什么其他字符串都没有匹配的原因。