在两个字符串

时间:2017-08-16 19:55:57

标签: python regex

我有一个大文字,如下面的摘录:

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)

但我最终得到一个空列表。我尝试了几个条款,但我似乎无法找到解决方案。

2 个答案:

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