如何使用正则表达式来解决这个问题?

Syl*_*ain 2 python regex

鉴于该字符串:

\n
\n
text1\n
\ttext2\n
  Message: 1st message\n
some more text\n
\n
\n
  Message: 2dn message\n\n
\t\t
Message: 3rd message\n
text3\n

我想从多行字符串中提取消息(令牌是'消息:').我应该使用什么正则表达式来捕获这3组:

  • 第1组:'第一条消息'
  • 第2组:'2dn message'
  • 第3组:'第3条消息'

我尝试了很多东西,但我可以让表达式工作,因为字符串是一个多行字符串.

我的程序是在python 2.6中,但我认为它使用的语言并没有太大的区别......

Sil*_*ost 9

>>> re.findall('Message: (.+?)$', s, re.M)
['1st message', '2dn message', '3rd message']
Run Code Online (Sandbox Code Playgroud)

re.M标志给出特殊的意义^$:

指定时,模式字符'^'匹配字符串的开头和每行的开头(紧跟在每个换行符之后); 并且模式字符'$' 在字符串的末尾和每行的末尾(紧接在每个换行符之前)匹配.默认情况下,'^'仅匹配字符串的开头,并且'$'仅匹配字符串的结尾,紧接在字符串末尾的换行符(如果有)之前.

(.+?)$ 匹配至少一个字符,直到字符串字符的最近端.

编辑:确实简单的版本也会起作用:

>>> re.findall('Message: (.+)', s)
['1st message', '2dn message', '3rd message']
Run Code Online (Sandbox Code Playgroud)

我很惊讶它不在你试过的那么多东西的列表中:)

  • 如果这就是他想要的,为什么不只是re.findall('Message:(.+)',s)? (2认同)