[英]replaces multiple occurances of a character (except for first and last) in a python string
我想知道在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,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'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.