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

2024-05-17 07:15:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样的字符串:

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和下一个单词之间添加了连字符

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


Tags: 字符单词catjpg空格americanstrings品种
2条回答

试试这个[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 ]

下面是一种使用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'

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

相关问题 更多 >