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,但它太复杂了,不胜感激
答案 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