用分号替换list元素中的变量分隔符

时间:2018-06-18 08:08:32

标签: python python-2.7

给出清单:

private void setGridViewItemClickListener(){
        gridView.setOnItemClickListener((parent, view, position, id) -> {
            Bundle bundle = new Bundle();
            bundle.putInt("position", position);
            bundle.putStringArrayList("imageURLs", listImageURLs);
            Intent intent = new Intent(this, ImageActivity.class);
            intent.putExtras(bundle);
            startActivity(intent);
        });
    }

注意:我每次都会收到一个动态列表,每次都会在列表元素中出现不同的分隔符。

预期清单:

['1~A A1', '2~ B B1', '3~C C1', '4~D D1'] # Delimiter is not fixed

尝试使用以下代码,该代码适用于字符串类型。

['1;A A1','2;B B1','3;C C1','4;D D1']

3 个答案:

答案 0 :(得分:1)

使用Regex。

<强>演示:

import re
l = ['1~A A1', '2~ B B1', '3~C C1', '4~D D1'] 

for i, value in enumerate(l):
    l[i] = re.sub(r"[^A-Za-z0-9\s]", ";", value)
print(l)

<强>输出:

['1;A A1', '2; B B1', '3;C C1', '4;D D1']

答案 1 :(得分:1)

如果您知道可能的分隔符集合为^ ; | ,~(来自评论),请使用re.sub中的分隔符并将所有分隔符替换为;

>>> import re    
>>> l = ['1~A A1', '2~ B B1', '3~C C1', '4~D D1'] 
>>> [re.sub(r"[;,|^~]", ";", s) for s in l]
['1;A A1', '2; B B1', '3;C C1', '4;D D1']

请注意,其中一些在正则表达式中具有特殊含义,例如如果您将^放在开头,[...]将被反转。如果有疑问,你可以将它们作为\^等进行转义,但按此顺序也应该没问题。

答案 2 :(得分:0)

如果分隔符的位置是固定的,那么最差的解决方案可能是最好的:

>>> l = ['1~A A1', '2~ B B1', '3~C C1', '4~D D1']
>>> for index, value in enumerate(l):
    l[index] = l[index][0]+';' +l[index][2:]

另外,@ Rakesh的上述解决方案已经足够了