Python: replace terms in a string except for the l

2019-01-27 21:11发布

问题:

How does one go about replacing terms in a string - except for the last, which needs to be replaced to something different?

An example:

    letters = 'a;b;c;d'

needs to be changed to

    letters = 'a, b, c & d'

I have used the replace function, as below:

    letters = letters.replace(';',', ')

to give

    letters = 'a, b, c, d'

The problem is that I do not know how to replace the last comma from this into an ampersand. A position dependent function cannot be used as there could be any number of letters e.g 'a;b' or 'a;b;c;d;e;f;g' . I have searched through stackoverflow and the python tutorials, but cannot find a function to just replace the last found term, can anyone help?

回答1:

In str.replace you can also pass an optional 3rd argument(count) which is used to handle the number of replacements being done.

In [20]: strs = 'a;b;c;d'

In [21]: count = strs.count(";") - 1

In [22]: strs = strs.replace(';', ', ', count).replace(';', ' & ')

In [24]: strs
Out[24]: 'a, b, c & d'

Help on str.replace:

S.replace(old, new[, count]) -> string

Return a copy of string S with all occurrences of substring
old replaced by new.  If the optional argument count is
given, only the first count occurrences are replaced.


回答2:

In [1]: letters = 'a;b;c;d'

In [2]: ' & '.join(letters.replace(';', ', ').rsplit(', ', 1))
Out[2]: 'a, b, c & d'


回答3:

Another way of doing it in one line without knowing the number of occurrences:

letters = 'a;b;c;d'
letters[::-1].replace(';', ' & ', 1)[::-1].replace(';', ', ')