簡體   English   中英

替換python字符串中多次出現的某個字符(第一個和最后一個除外)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM