如何用python编写一个正则表达式来匹配这一点?

如何用python编写一个正则表达式来匹配这一点?,python,regex,Python,Regex,代码如下: #coding=utf-8 import re str = "The output is\n" str += "1) python\n" str += "A dynamic language\n" str += "easy to learn\n" str += "2) C++\n" str += "difficult to learn\n" str += "3244) PHP\n" str += "eay to learn\n" pattern = r'^[1-9]+\) .

代码如下:

#coding=utf-8

import re

str = "The output is\n"
str += "1) python\n"
str += "A dynamic language\n"
str += "easy to learn\n"
str += "2) C++\n"
str += "difficult to learn\n"
str += "3244) PHP\n"
str += "eay to learn\n"


pattern = r'^[1-9]+\) .*'
print re.findall(pattern,str,re.M)
输出是

['1) python', '2) C++', '3244) PHP']
但是,我想这样分割它:

['1) python\n'A dynamic language\n easy to learn\n'  2) C++\n difficult to learn\n', '3244) PHP\n easy to learn\n']

即,忽略第一行不以“数字”开头,当遇到一个数字时,下面的行直到下一行以“数字”开始被认为是同一组。


我应该如何重写模式?

您需要在模式中添加用于空格的python正则表达式,以解释换行符

试试这个:

regex = r"[1-9]+\) .*\s.*"

\s是任何空格的正则表达式,您可以使用它,它允许数字,但后面不带右括号:

>>> import re
>>> strs = 'The output is\n1) python\nA dynamic language\neasy to learn\n2) C++\ndifficult to learn\n3244) PHP\neay to learn\n'
>>> re.findall(r'\d+\)\s[^\d]+',strs)
['1) python\nA dynamic language\neasy to learn\n',
'2) C++\ndifficult to learn\n',
'3244) PHP\neay to learn\n']
re.findall(r'\d+\)\s(?:\D+|\d+(?!\d*\)))*',str)

不要对正则表达式执行此操作。