我想知道用python实现以下功能的最简洁的方法是什么:
给定一个最小为2个','字符的字符串(例如,' abc,123,#$@5,dg')。我想创建一个新字符串,其中原始字符串中的第一个和最后一个','字符保持不变,但将','的其他出现替换为'_'字符。
以下是一些输入/输出示例:
输入:str1 = 'abc,1,2201-3'
输出:str2 = 'abc,1,2201-3'
输入:str1 = '$2a$10$.XfjKl/,abcd, 1, ##, s, for free,2-3-4'
输出:str2 = '$2a$10$.XfjKl/,abcd_ 1_ ##_ s_ for free,2-3-4'
一种方法是通过','字符将字符串拆分为列表,使用'_'连接列表的中间元素,然后使用第一个元素+ ',' +中间元素+ ',' +最后一个元素创建一个新字符串。是否有一种更简洁的方法来做到这一点(也许使用Regex)?
str1 = '$2a$10$.XfjKl/,abcd, 1, ##, s, for free,2-3-4'
parts = str1.split(',')
str2 = '{},{},{}'.format(parts[0],'_'.join(parts[1:-1]),parts[-1])
如果您正在寻找正则表达式的解决方案,请尝试:
import re
str1 = '$2a$10$.XfjKl/,abcd, 1, ##, s, for free,2-3-4'
p=r'([^,]+,)(.*)(?=(,.*))'
m=re.search(p,str1)
r=''.join([m.group(1),re.sub(r',',r'_',m.group(2)),m.group(3)])
print r
输出:str1 = '$2a$10$。XfjKl/,abcd, 1, ##, s, for free,2-3-4'
使用正则表达式将字符串分成三部分,然后使用re.sub()
先将所有点替换为行,然后将第一行和最后一行替换为点。
import re
line = '$2a$10$.XfjKl/,abcd, 1, ##, s, for free,2-3-4'
#replace all dot with line
pat_all_dot = re.compile(r',')
line = pat_all_dot.sub('_', line)
#replace first line with dot
line = re.sub(r'_', ',' ,line, count = 1)
#replace end line with dot
line = re.sub(r'(_)([S]*?)$', r',2', line) # '$2a$10$.XfjKl/,abcd_ 1_ ##_ s_ for free,2-3-4'