Python 正则表达式可以在线使用但不能在代码中使用

Python regex works online but not in code

此正则表达式模式:^.+\'(.+.png) 在在线编辑器中有效,但在 python 代码中无效。我看到其他帖子也有同样的问题。我尝试应用那些;

正则表达式应从单引号开始匹配,直到匹配到 .png。

例如:

用这个字符串 Executing identify -format %k 'testcases/art/test_files/video_images/single-[snk1=640x480p59.9]-[src1=720x480i59.9].png'

我要:testcases/art/test_files/video_images/single-[snk1=640x480p59.9]-[src1=720x480i59.9].png

我试过了(排名不分先后):

result = re.findall("^.+\'(.+\.png)", self.stream.getvalue()) # I also tried prepending all of these with r
result = re.findall("^.+\'(.+.png)", self.stream.getvalue())
result = re.findall("^.+'(.+.png)", self.stream.getvalue())
result = re.findall("^.+'(.+.png)", str(self.stream.getvalue()))
result = re.findall("\^.+'(.+.png)\", self.stream.getvalue())

编辑:我也尝试使用 re.match()re.search()

更新:

可能是我从中获取字符串的地方 cStringIO.StringO.getvalue() 这是代码 self.stream.getvalue() 中的这一部分。这是我没有写的代码。我该如何使用正则表达式?

您需要将 self.stream.getvalue() 的输出转换为字符串,并丢弃模式的 ^.+ 部分,因为 re.findall 会搜索输入字符串中任何位置的所有匹配项。

使用

results = re.findall(r"'([^']+\.png)", str(self.stream.getvalue()))

此外,注意转义模式中 . 个字符的点。

图案详情

  • ' - 单引号
  • ([^']+\.png) - 捕获组 1:
    • [^']+ - '
    • 以外的 1+ 个字符
    • \.png - .png 子字符串。