There are various different ways you may want to search and replace within a string - and this post shows you how a lot of them work in Python.
1. You may want to replace one literal piece of text by another
2. You may want to replace a string matching a pattern by a literal string
3. You may want to replace a string that matches a pattern by a new string that contains all of (or elements of) the string that matched
4. You may want to replace a string that matches a pattern by a new string that's based on running a piece of code on that matched string.
Replacing one literal string by another
>>> text = "The pea soup club"
>>> text.replace("pea","vegetable")
'The vegetable soup club'
>>>
Replacing a matched string by a literal
This and the following example all use a regular expression:
import re
digits = re.compile(r'(\d+)')
Simply give the replacement string and the incoming string as parameters to the
sub method on the regular expression object:
highprice = digits.sub("99",cost)
print highprice
Replacing a matched string by one containing part of the match
* Mark the bit of the incoming string you want to use in the output with capture parentheses
* Use {\1} for the first capture (etc) in the output string in your
sub
highprice = digits.sub(r'** {\1} **',cost)
print highprice
Replace a matched string by the result of running code on that match
The example I have used here is an example which takes a numeric vaklue in a string and replaces it by a value that's 5 more; this can't by a simple string replacement ... 17 + 5 => 22 which isn't a straightforward string operations, even in Python.
* Mark the bit of the incoming string you want to calculate on for the output with capture parentheses
* Define a function that converts your captured group(s) into a new string which it returns
* use the "runnable" - i.e. the function - in place of the more usual output string object in your
sub
def action(val):
newval = "%d" % (int(val.group()) + 7)
return newval
highprice = digits.sub(action,cost)
print highprice
There's a complete source code example from yesterday's
Python Programming Course - see
[here].
(written 2010-03-25)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
Y108 - Python - String Handling [324] The backtick operator in Python and Perl - (2005-05-25)
[463] Splitting the difference - (2005-10-13)
[496] Python printf - (2005-11-15)
[560] The fencepost problem - (2006-01-10)
[773] Breaking bread - (2006-06-22)
[903] Pieces of Python - (2006-10-23)
[943] Matching within multiline strings, and ignoring case in regular expressions - (2006-11-25)
[954] Splitting Pythons in Bradford - (2006-11-29)
[970] String duplication - x in Perl, * in Python and Ruby - (2006-12-07)
[1110] Python - two different splits - (2007-03-15)
[1195] Regular Express Primer - (2007-05-20)
[1517] Python - formatting objects - (2008-01-24)
[1608] Underlining in Perl and Python - the x and * operator in use - (2008-04-12)
[1876] Python Regular Expressions - (2008-11-08)
[2284] Strings as collections in Python - (2009-07-12)
[2406] Pound Sign in Python Program - (2009-09-15)
[2721] Regular Expressions in Python - (2010-04-14)
[2765] Running operating system commands from your Python program - (2010-05-14)
[2780] Formatted Printing in Python - (2010-05-25)
[2814] Python - splitting and joining strings - (2010-06-16)
[3090] Matching to a string - what if it matches in many possible ways? - (2010-12-17)
[3218] Matching a license plate or product code - Regular Expressions - (2011-03-28)
[3349] Formatting output in Python through str.format - (2011-07-07)
[3468] Python string formatting - the move from % to str.format - (2011-10-08)
[3469] Teaching dilemma - old tricks and techniques, or recent enhancements? - (2011-10-08)
[3796] Backquote, backtic, str and repr in Python - conversion object to string - (2012-07-05)
[3886] Formatting output - why we need to, and first Python example - (2012-10-09)
[4027] Collections in Python - list tuple dict and string. - (2013-03-04)
[4152] Why are bus fares so high? - (2013-08-18)
[4213] Formatting options in Python - (2013-11-16)
[4307] Identifying and clearing denial of service attacks on your Apache server - (2014-09-27)
[4360] Python - comparison of old and new string formatters - (2014-12-22)
[4593] Command line parameter handling in Python via the argparse module - (2015-12-08)
[4595] Python formatting update - including named completions - (2015-12-10)
[4659] Prining a pound sign from Python AND running from the command line at the same time - (2016-03-03)
Some other Articles
Garlic bread without garlicTCP v UDP / Client v Server - Python examplesMultiple processes (forking) in PythonMethods that run on classes (static methods) in PythonFlexible search and replace in PythonNew brochures for the Melksham areaThe World Company Register - is it another scam?Can my dog eat potatoes? Doggie Dietary Research, and political sleaze!Security considerations in programming - what do we teach?A lovely spring afternoon