找到“%”后,正则表达式停止搜索

时间:2018-11-25 08:36:09

标签: python regex python-3.x

import re
x=r'Biblioteca_Nacional_de_Espa%C3%B1a'
y=re.compile('[A-Za-z_](?!%)')
for i in y.findall(x):
    print(i,end='')

这是一个示例,在此示例中,我希望搜索一旦找到%并立即停止搜索,并在它们之间打印空格,就应该Biblioteca Nacional de Espa,我找到了此链接Regex stop searching at specific string,但它太复杂了,不胜感激

1 个答案:

答案 0 :(得分:1)

您的正则表达式[A-Za-z_](?!%)与字符集中的单个字符匹配,后面没有%。因此,它不会仅打印出现在a字符之前的3%,并且会打印字符集中的每个字符。但是不要以为您想要的是Biblioteca Nacional de Espa

您可以使用此正则表达式,

(?<!%)([a-zA-Z]+)(?=.*%)

并找到所有匹配的输入。这是一个示例python代码,

import re
x=r'Biblioteca_Nacional_de_Espa%C3%B1a'
y=re.compile('(?<!%)([a-zA-Z]+)(?=.*%)')
tokens = y.findall(x)
print(' '.join(tokens))

它打印,

Biblioteca Nacional de Espa

如果您的帖子中有错字,并且确实想捕获Biblioteca_Nacional_de_Espa,那么您只需在字符集中保留下划线(我删除了下划线),就可以使正则表达式成为

(?<!%)([a-zA-Z_]+)(?=.*%)

然后您的python代码变为

import re
x=r'Biblioteca_Nacional_de_Espa%C3%B1a'
y=re.compile('(?<!%)([a-zA-Z_]+)(?=.*%)')
tokens = y.findall(x)
print(' '.join(tokens))

输出

Biblioteca_Nacional_de_Espa