Skip to main content
 首页 » 编程设计

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

2024年11月01日37yjmyzz

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

  • 添加一个额外的转义斜线

  • 在开始引号前加上 r

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

例如:

使用此字符串 执行 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 子字符串。