![](/img/trans.png)
[英]Extract integer in a filename from complete path using split regex in Pandas
[英]How to extract filename from path using regex
我想使用正则表达式从路径中提取文件名:
mysting = '/content/drive/My Drive/data/happy (463).jpg'
我如何提取'happy.jpg'
?
我试过这个: '[^/]*$'
但结果仍然包括括号中的数字,我不想要: 'happy (463).jpg'
我该如何改进它?
您可以使用 2 个捕获组。 在第一组匹配/
并捕获组 1 中的 1+ 个单词字符。
然后匹配括号之间的 1+ 个数字并捕获.jpg
断言第 2 组中字符串的结尾。
^.*/(\w+)\s*\(\d+\)(\.jpg)$
在将匹配的部分
^.*/
匹配到最后/
(\\w+)
Catpure组 1 ,匹配 1+ 个单词字符\\s*
匹配 1+ 个空格字符\\(\\d+\\)
匹配括号之间的 1+ 个数字(\\.jpg)
捕获组 2 ,匹配.jpg
$
字符串结尾然后在替换中使用group 1和group 2得到happy.jpg
import re
regex = r"^.*/(\w+)\s*\(\d+\)(\.jpg)$"
test_str = "/content/drive/My Drive/data/happy (463).jpg"
result = re.sub(regex, r"\1\2", test_str, 1)
if result:
print (result)
输出
happy.jpg
没有正则表达式; str
方法( str.partition
和str.rpartition
):
In [185]: filename = mysting.rpartition('/')[-1]
In [186]: filename
Out[186]: 'happy (463).jpg'
In [187]: f"{filename.partition(' ')[0]}.{filename.rpartition('.')[-1]}"
Out[187]: 'happy.jpg'
使用正则表达式; re.sub
:
re.sub(r'.*/(?!.*/)([^\s]+)[^.]+(\..*)', r'\1\2', mysting)
.*/
贪婪地匹配到最后一个/
零宽度负前瞻(?!.*/)
确保没有/
在任何地方向前
([^\\s]+)
匹配到下一个空格并作为第一个捕获的组
[^.]+
匹配到 next .
(\\..*)
匹配一个文字.
后跟任意数量的字符并作为第二个捕获组; 如果您想更保守地匹配 3 个字符甚至文字.jpg
您也可以这样做
在替换中,仅使用捕获的组
例子:
In [183]: mysting = '/content/drive/My Drive/data/happy (463).jpg'
In [184]: re.sub(r'.*/(?!.*/)([^\s]+)[^.]+(\..*)', r'\1\2', mysting)
Out[184]: 'happy.jpg'
我使用javascript。
在 javascript 的情况下,
const myString="happy (463).jpg"; const result=myString.replace(/\\s\\(\\d*\\)/,'');
在斜杠分隔符中拆分路径后,您可以应用此代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.