How to replace multiple substrings of a string?
Here is a short example that should do the trick with regular expressions:
import re
rep = {"condition1": "", "condition2": "text"} # define desired replacements here
# use these three lines to do the replacement
rep = dict((re.escape(k), v) for k, v in rep.iteritems())
#Python 3 renamed dict.iteritems to dict.items so use rep.items() for latest versions
pattern = re.compile("|".join(rep.keys()))
text = pattern.sub(lambda m: rep[re.escape(m.group(0))], text)
For example:
>>> pattern.sub(lambda m: rep[re.escape(m.group(0))], "(condition1) and --condition2--")
'() and --text--'
Replace multiple strings with multiple other strings
As an answer to:
looking for an up-to-date answer
If you are using "words" as in your current example, you might extend the answer of Ben McCormick using a non capture group and add word boundaries \b
at the left and at the right to prevent partial matches.
\b(?:cathy|cat|catch)\b
\b
A word boundary to prevent a partial match(?:
Non capture groupcathy|cat|catch
match one of the alternatives
)
Close non capture group\b
A word boundary to prevent a partial match
Example for the original question:
let str = "I have a cat, a dog, and a goat.";
const mapObj = {
cat: "dog",
dog: "goat",
goat: "cat"
};
str = str.replace(/\b(?:cat|dog|goat)\b/gi, matched => mapObj[matched]);
console.log(str);
How to use str.replace to replace multiple pairs at once?
You can create a dictionary and pass it to the function replace()
without needing to chain or name the function so many times.
replacers = {',':'','.':'','-':'','ltd':'limited'} #etc....
df1['CompanyA'] = df1['CompanyA'].replace(replacers)
Python: How to str.replace multiple different strings with the same replacement?
You can just use List-comprehension.
>>> [x.replace('!', '').replace('?','') for x in list_names]
['sdf', 'sdfds', 'afsafsa', 'afasf']
Also, if you have multiple strings to replace, you can even use regular expression combining them by |
using re.sub
function as mentioned below:
>>> import re
>>> [re.sub('\?|!', '', x) for x in list_names]
['sdf', 'sdfds', 'afsafsa', 'afasf']
Java Replacing multiple different substring in a string at once (or in the most efficient way)
If the string you are operating on is very long, or you are operating on many strings, then it could be worthwhile using a java.util.regex.Matcher (this requires time up-front to compile, so it won't be efficient if your input is very small or your search pattern changes frequently).
Below is a full example, based on a list of tokens taken from a map. (Uses StringUtils from Apache Commons Lang).
Map<String,String> tokens = new HashMap<String,String>();
tokens.put("cat", "Garfield");
tokens.put("beverage", "coffee");
String template = "%cat% really needs some %beverage%.";
// Create pattern of the format "%(cat|beverage)%"
String patternString = "%(" + StringUtils.join(tokens.keySet(), "|") + ")%";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(template);
StringBuffer sb = new StringBuffer();
while(matcher.find()) {
matcher.appendReplacement(sb, tokens.get(matcher.group(1)));
}
matcher.appendTail(sb);
System.out.println(sb.toString());
Once the regular expression is compiled, scanning the input string is generally very quick (although if your regular expression is complex or involves backtracking then you would still need to benchmark in order to confirm this!)
Python replace multiple substrings in a string
If a
and b
are your inputs from your database, you can create your wanted output d
like this:
import re
a = "{name} likes {post}"
b = ['John', '515335']
c = re.sub(r'\{[^}]+\}', '{}', a)
d = c.format(*b)
Basically c
will be a modified version of your input string which will simplify the placeholders to {}
on which we then can use .format()
to replace the placeholders with the values in the same order.
How to replace multiple substrings in a Pandas series using a dictionary?
You can use:
#Borrowed from an external website
def multipleReplace(text, wordDict):
for key in wordDict:
text = text.replace(key, wordDict[key])
return text
print(testdf.apply(lambda x: multipleReplace(x,to_sub)))
0 Alice went to hospital yesterday
1 John went to hospital yesterday
EDIT
Using the dictionary as below mentioned comments:
to_sub = {
'Mary': 'Alice',
'school': 'hospital',
'today': 'yesterday',
'tal': 'zzz'
}
testdf.apply(lambda x: ' '.join([to_sub.get(i, i) for i in x.split()]))
Outputs:
0 Alice went to hospital yesterday
1 John went to hospital yesterday
Replace multiple substrings in a Pandas series with a value
You can perform this task by forming a |-separated string. This works because pd.Series.str.replace
accepts regex:
Replace occurrences of pattern/regex in the Series/Index with some
other string. Equivalent to str.replace() or re.sub().
This avoids the need to create a dictionary.
import pandas as pd
df = pd.DataFrame({'A': ['LOCAL TEST', 'TEST FOREIGN', 'ANOTHER HELLO', 'NOTHING']})
pattern = '|'.join(['LOCAL', 'FOREIGN', 'HELLO'])
df['A'] = df['A'].str.replace(pattern, 'CORP')
# A
# 0 CORP TEST
# 1 TEST CORP
# 2 ANOTHER CORP
# 3 NOTHING
Replacing multiple substrings from a string in Java/Android
You can create a function like below:
String replaceMultiple (String baseString, String ... replaceParts) {
for (String s : replaceParts) {
baseString = baseString.replaceAll(s, "");
}
return baseString;
}
And call it like:
String finalString = replaceMultiple("This is just a string folks", "This is", "folks");
You can pass multiple strings that are to be replaced after the first parameter.
Remove multiple substring from a string Python
Shortly with regexp substitution:
import re
my_str = "bad-Classname's"
my_str = re.sub(r"[ ,/'’-]", "", my_str)
print(my_str) # badClassnames
[ ,/'’-]
- regex character class, matches a single character in the list ",/'’-
"
Related Topics
Extracting Text from Ms Word Files in Python
How to Change the Environment of a Parent Process in Python
How to Set the 'Backend' in Matplotlib in Python
Pass Input/Variables to Command/Script Over Ssh Using Python Paramiko
How to Create a Density Plot in Matplotlib
Converting Epoch Time With Milliseconds to Datetime
Do Python Regular Expressions Have an Equivalent to Ruby'S Atomic Grouping
Python: How to Kill Child Process(Es) When Parent Dies
Run Python Script At Startup in Ubuntu
Compare Two Images the Python/Linux Way
Show Matplotlib Plots (And Other Gui) in Ubuntu (Wsl1 & Wsl2)
Run Interactive Bash With Popen and a Dedicated Tty Python
Calling a Python Script from Command Line Without Typing "Python" First
Standard_Init_Linux.Go:178: Exec User Process Caused "Exec Format Error"
Call Python Script from Bash With Argument
Checking If Element Exists With Python Selenium
Find the First Instance of a Nonzero Number in a List in Python