Python 使用re.findall查找字符之间的字符串时包含整个字符串

Python 使用re.findall查找字符之间的字符串时包含整个字符串,python,regex,Python,Regex,当像下面的例子一样使用re.findall时,是否需要包含最后四个字符(.JPG)?因为它们可能是小写或大写,我不能仅仅用另一根线把它缝合在一起,并确保它是正确的。(实际上,它是一个由几十个/数百个JPG组成的列表,有些是大写的,有些是小写的。) 事实上,我在大约两周前找到了这个问题的答案,但后来我失去了它(尽管谷歌搜索了很多) 我已经做了很多搜索/阅读,如果之前有人问过这个问题,我表示歉意 import re examplestring = '/home/folder/image.JPG 2

当像下面的例子一样使用re.findall时,是否需要包含最后四个字符(.JPG)?因为它们可能是小写或大写,我不能仅仅用另一根线把它缝合在一起,并确保它是正确的。(实际上,它是一个由几十个/数百个JPG组成的列表,有些是大写的,有些是小写的。)

事实上,我在大约两周前找到了这个问题的答案,但后来我失去了它(尽管谷歌搜索了很多)

我已经做了很多搜索/阅读,如果之前有人问过这个问题,我表示歉意

import re

examplestring = '/home/folder/image.JPG 200x400 20/12/2018'

print(re.findall(r'^(.*?).jpg', examplestring, flags=re.IGNORECASE))
实际产量:

['/home/folder/image']
我希望输出为:

['/home/folder/image.JPG']
方法1 也许

(?i)\S+\.jpg

以防万一,如果我们使用的是
jpeg
,可能就行了

如果有必要,我们可以包括额外的边界,比如开始锚定

此外,如果目录名或文件名中有空格,则表达式不起作用


方法2 如果图像路径中存在水平空间,则

(?i)^[^\r\n]+\.jpg

可能会有一些可供探索的选择

试验 输出
如果您希望简化/修改/探索表达式,将在的右上面板中进行解释。如果您愿意,还可以在中查看它与一些示例输入的匹配情况


正则表达式电路 可视化正则表达式:


首先,确保转义点,因为它是正则表达式中的特殊字符

在组中包括
.jpg

^(.*?\.jpg)
或者根本不用团队

^.*?\.jpg

如果该模式是一致的,请执行以下操作:
examplestring=examplestring.split()?这很好,但我不明白怎么做,所以我会选择上面的答案,因为这更容易让我动脑。非常感谢。@AndrewOZ
(?i)
re.IGNORECASE
的嵌入式版本。主位不同:
\S+
表示“一个或多个非空白字符”,而
*?
表示“零个或多个字符的最小数量”。我不知道艾玛为什么要改变它。@Emma啊,我明白了。在答案中包含这样的信息,以及您所做的任何假设或推断,这真的很有帮助。干杯,如果图像名称或目录名称中有空格,这将不起作用?谢谢,这太完美了,教程总是使用两边都有字符的组。我不知道你能做到这一点,比我想象的要灵活和友好得多。我在原始字符串前面有“r”,所以我不需要逃逸圆点。@AndrewOZ不,原始字符串防止反斜杠充当特殊字符。它们不会影响其他任何事情。@AndrewOZ无需道歉!:)
import re

string = '''
/home/folder/image.JPG 200x400 20/12/2018
  /home/folder/image.jpg 200x400 20/12/2018
  /home/folder/image.jpeg 200x400 20/12/2018
'''

expression = r'(?i)\S+\.jpe?g'

print(re.findall(expression, string))
['/home/folder/image.JPG', '/home/folder/image.jpg', '/home/folder/image.jpeg']
^(.*?\.jpg)
^.*?\.jpg