【问题标题】:regex stop searching after '%' is found正则表达式在找到“%”后停止搜索
【发布时间】:2018-11-25 17:57:32
【问题描述】:
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,但它太复杂了,任何帮助表示赞赏

【问题讨论】:

  • 您的输入没有空格?
  • 为什么不从第一个% 中剪掉部分,然后才得到单词呢? x.split("%", 1)[0].split()
  • 为什么不使用[^%]+ 并捕获数组中的第一个元素?

标签: python regex python-3.x


【解决方案1】:

您的正则表达式[A-Za-z_](?!%) 匹配您的字符集中没有跟% 的单个字符。由于它不会只打印出现在% 字符之前的a3,并打印字符集中的每个字符。但不要认为你想要那样,因为你的预期输出是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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 2013-06-29
    • 2014-01-23
    • 2014-10-29
    相关资源
    最近更新 更多