【问题标题】:Regular Expression Clarification?正则表达式澄清?
【发布时间】:2018-07-20 19:43:59
【问题描述】:

如果我有一个包含多个文本实例的字符串,如下所示:

"img": "/static/thumbs/1607.02533v4.pdf.jpg"

提取这部分的正则表达式会是什么样子:

1607.02533v4.pdf

尝试过这样的事情:re.findall(r'(?<=thumbs/)(.*)(?=.jpg)') 来获取文本,但它似乎不起作用。

编辑:找出问题所在。比赛很贪心,需要加一个? .* 之后

re.findall(r'(?<=thumbs/)(.*?)(?=.jpg)')

【问题讨论】:

  • 拇指后缺少转义字符。应该是(?<=thumbs\/)(.*)(?=.jpg)。检查here
  • @WStokvis 绝对不应该是.*
  • 这个字符串是 JSON 吗?
  • 你也可以试试这个:/thumbs/(.*?).jpg
  • 如果你想使用正则表达式,它应该是re.findall(r'"img"\s*:\s*"[^"]*/([^"]*)\.jpg"', s),但建议先使用json模块先获取正确的纯文本然后提取您需要的值更容易。

标签: python regex text-extraction


【解决方案1】:

这是一个假设文件都具有相同命名约定的示例:

import re
s = '''
"img": "/static/thumbs/1607.02533v1.pdf.jpg"
"img": "/static/thumbs/1608.02533v2.pdf.jpg"
"img": "/static/thumbs/1609.02533v3.pdf.jpg"
"img": "/static/thumbs/1610.02533v4.pdf.jpg"
'''
re.findall(r'thumbs/([0-9.a-z]+.pdf)', s)

输出:

['1607.02533v1.pdf', '1608.02533v2.pdf', '1609.02533v3.pdf', '1610.02533v4.pdf']

解释:

thumbs/([0-9.a-z]+.pdf)

thumbs/ 开头 有一个包含 1 个或多个字符的组 0-9 一个 .a-z 并以 .pdf 结尾

【讨论】:

    【解决方案2】:

    执行1607.02533v4.pdf

    对于 C# ASP.NET 2.0 - 4.7.2、.NET Core、C++、Delphi:

    [0-9]+\.[0-9]+v[0-9]+\.\w{3}
    

    执行1607.02533v4

    对于 C# ASP.NET 2.0 - 4.7.2、.NET Core、C++、Delphi:

    [0-9]+\.[0-9]+v[0-9]+
    

    Java 8、Javascript、MySQL、Orqcle 11gR2 和 12c、PHP 7.0.4 - 4.1.17、Visual Basic 6、Python 2.7、Python 3.6、Ruby 2.4 - 2.5、VBScript: p>

    [0-9]+\.[0-9]+v
    

    这里online RegEx tester

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-31
      相关资源
      最近更新 更多