In python use re.sub with a dict to replace multi exact substrings I use re.sub with a dict to replace multi "exact" substrings.
import re
words = " apple pineapple cat category data old_data"
dic = {"apple":"apple_new", "cat":"cat_new", "data":"data_new"}
#pattern = re.compile("|".join(dic.keys()))
pattern = r'\b(' + r'|'.join([re.escape(x) for x in list(dic.keys())]) + r')\b'
new_words = re.sub(pattern, lambda m: dic[m.group(0)], words)
print(new_words)
Now I want to just replace first substring in each line. Original words is :
words = " apple cat data old_data\n pineapple category data old_data\n data old_data"
The result I expected is:
words = " apple_new cat data old_data\n pineapple category data old_data\n data_new old_data"
It keeps spaces and \n, just replace first substring in each line. I have tried (\s*) to match 0~n spaces in each line, But it doesn't work.
pattern = r'\s*\b(' + r'|'.join([re.escape(x) for x in list(dic.keys())]) + r')\b'
How do I fix it?