I want to replace space with comma for this particular pattern only not all spaces: "21311 asd"
Input:
["dog,cat ax 21311 asd","131 MAN"]
Desired output:
["dog,cat ax 21311,asd","131,MAN"]
Code:
input = ["dog,cat ax 21311 asd","131 MAN"]
new_list = []
for i in input:
word = re.findall(r"\d*\s[a-zA-Z]*" , i)
new_word = re.sub(word , r"\d*\s[a-zA-Z]*" , i)
new_list = new_list new_word
print(new_list)
I know this is wrong syntax, but I don't know how to do it using Regex or any other method.
I'm using Python 3 and Jupyter notebook.
CodePudding user response:
Try this:
input = ["dog,cat,21311 asd", "131 MAN"]
print([data.replace(' ', ',') for data in input])
CodePudding user response:
OK, now that you clarified your request, assuming the pattern you are interested in is
one or more digits followed by a space followed by one or more ASCII letters
Here is the correct way to do it:
import re
pattern = re.compile(r"(\d )\s([a-zA-Z])")
replacement = r"\1,\2"
inp = ["dog,cat ax 21311 asd", "131 MAN"]
out = [re.sub(pattern, replacement, s) for s in inp]
print(out)
The re.sub
function accepts references to matching groups in its repl
argument. We group the digits (1) and the letters (2) and thus replace the substring with those two groups with a comma in between.
CodePudding user response:
You are using re.sub()
with the wrong argument positions, the correct way is to call it like re.sub(regex, replace, string)
. Also you are iterating over input incorrectly. That's the right way to do it:
import re
input = ["dog,cat,21311 asd","131 MAN"]
new_list = []
for word in input:
new_word = re.sub(r" " , ",", word)
new_list.append(new_word)
print(new_list)
CodePudding user response:
Solution with re.sub()
and pattern with positive Lookahead and Lookbehind
import re
lst = ["dog,cat ax 21311 asd","131 MAN"]
new_list = [re.sub(r"(?<=\d)\s (?=[a-zA-Z])",",", i) for i in lst]
print(new_list)
['dog,cat ax 21311,asd', '131,MAN']