我有一个大文字,如下面的摘录:
test = '''
Sra. Montero.- ¡No, no! No empecemos.
Sr. Jefe de Gabinete de Ministros.- Respetuosamente se lo digo...
Sra. Montero.- El senador Fernández
Sra. Montero.- ¡No, no! No empecemos.
Sr. Jefe de Gabinete de Ministros.- Respetuosamente se lo digo...
Sra. Montero.- El senador Fernández
Sra. Montero.- ¡No, no! No empecemos.
Sr. Jefe de Gabinete de Ministros.- Respetuosamente se lo digo...
Sra. Montero.- El senador Fernández
Sra. Montero.- ¡No, no! No empecemos.
Sr. Jefe de Gabinete de Ministros.- Respetuosamente se lo digo...
Sra. Montero.- El senador Fernández
'''
我希望得到字符串" Sr之间的所有文字。 Jefe de Gabinete de Ministros .-"和字符串" Sr {{random_text_here}} .-"。所以在这个例子中,我想得到的是:
data = ['Respetuosamente se lo digo...', 'Respetuosamente se lo digo...', 'Respetuosamente se lo digo...']
我知道正则表达式条款必须是非贪婪的,我已经测试了类似的东西:
bw_sr = re.compile('\.\-(.+?)Sr[.+]\.\-') #non greedy regexx
data = bw_sr.findall(test)
但我最终得到一个空列表。我尝试了几个条款,但我似乎无法找到解决方案。
答案 0 :(得分:0)
你的正则表达式是错误的(这个[.+]
在括号之间定义了一个字符范围,所以它不起作用,除了其他问题之外,无法区分“Sr.”和“Sra”(似乎你想看到输出的内容),我通过做Sr\.
)来修复。
我想出了那个符合公式的人,还有“ElsenadorFernández”等......没有标准可以过滤那些。我还在捕获组之前添加了\s*
来“剥离”空白:
bw_sr = re.compile('\.\-\s*(.+?)\nSr\..+?\.\-')
data = bw_sr.findall(test)
print(data)
结果:
['¡No, no! No empecemos.', '¡No, no! No empecemos.', '¡No, no! No empecemos.', '¡No, no! No empecemos.']
答案 1 :(得分:0)
它的工作:
bw_sr = re.compile('\.\- (.*)')
data = bw_sr.findall(test)