微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在特定位置将空格改为下划线

如何解决在特定位置将空格改为下划线

我有这样的字符串:

strings = ['pic1.jpg siberian cat 24 25','pic2.jpg siemese cat 14 32','pic3.jpg american bobtail cat 8 13','pic4.jpg cat 9 1']  

我想要的是将猫品种之间的空格替换为连字符,以消除 .jpg 和品种中第一个单词和数字之间的空格。

预期输出

['pic1.jpg siberian_cat 24 25','pic2.jpg siemese_cat 14 32','pic3.jpg american_bobtail cat 8 13','pic4.jpg cat 9 1'] 

我尝试构建模式如下:

[re.sub(r'(?<!jpg\s)([a-z])\s([a-z])\s([a-z])',r'\1_\2_\3',x) for x in strings ]

但是,我在 .jpg 和下一个单词之间添加了连字符。

问题在于“cat”并不总是放在单词组合的末尾。

解决方法

这是一种使用 re.sub 和回调函数的方法:

strings = ['pic1.jpg siberian cat 24 25','pic2.jpg siemese cat 14 32','pic3.jpg american bobtail cat 8 13','pic4.jpg cat 9 1']  
output = [re.sub(r'(?<!\S)\w+(?: \w+)* cat\b',lambda x: x.group().replace(' ','_'),x) for x in strings]
print(output)

打印:

['pic1.jpg siberian_cat 24 25','pic2.jpg siemese_cat 14 32','pic3.jpg american_bobtail_cat 8 13','pic4.jpg cat 9 1']

这里是对使用的正则表达式模式的解释:

(?<!\S)    assert what precedes first word is either whitespace or start of string
\w+        match a word,which is then followed by
(?: \w+)*  a space another word,zero or more times
[ ]        match a single space
cat\b      followed by 'cat'

换句话说,以第三个列表元素为例,正则表达式匹配american bobtail cat,然后在lambda回调函数中用下划线替换所有空格。

,

试试这个[re.sub(r'jpg\s((\S+\s)+)cat',"jpg " + "_".join(x.split('jpg')[1].split('cat')[0].strip().split()) + "_cat",x) for x in strings ]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?