Reputation: 287
I have a address list as :
addr = ['100 NORTH MAIN ROAD',
'100 BROAD ROAD APT.',
'SAROJINI DEVI ROAD',
'BROAD AVENUE ROAD']
I need to do my replacement work in a following function:
def subst(pattern, replace_str, string):
by defining a pattern outside of this function and passing it as an argument to subst.
I need an output like:
addr = ['100 NORTH MAIN RD',
'100 BROAD RD APT.',
'SAROJINI DEVI RD ',
'BROAD AVENUE RD']
where all 'ROAD' strings are replaced with 'RD'
def subst(pattern, replace_str, string):
#susbstitute pattern and return it
new=[]
for x in string:
new.insert((re.sub(r'^(ROAD)','RD',x)),x)
return new
def main():
addr = ['100 NORTH MAIN ROAD',
'100 BROAD ROAD APT.',
'SAROJINI DEVI ROAD',
'BROAD AVENUE ROAD']
#Create pattern Implementation here
pattern=r'^(ROAD)'
print (pattern)
#Use subst function to replace 'ROAD' to 'RD.',Store as new_address
new_address=subst(pattern,'RD',addr)
return new_address
I have done this and getting below error
Traceback (most recent call last):
File "python", line 23, in File "python", line 20, in main File "python", line 7, in subst
TypeError: 'str' object cannot be interpreted as an integer
Upvotes: 0
Views: 12301
Reputation: 1
Try this:
#!/bin/python3
import sys
import os
import io
import re
# Complete the function below.
def subst(pattern, replace_str, string):
#susbstitute pattern and return it
new_address=[pattern.sub(replace_str,st) for st in string]
return new_address
def main():
addr = ['100 NORTH MAIN ROAD',
'100 BROAD ROAD APT.',
'SAROJINI DEVI ROAD',
'BROAD AVENUE ROAD']
#Create pattern Implementation here
pattern=re.compile(r'\bROAD')
#Use subst function to replace 'ROAD' to 'RD.',Store as new_address
new_address=subst(pattern,'RD.',addr)
print(new_address)
return new_address
'''For testing the code, no input is required'''
if __name__ == "__main__":
main()
def bind(func):
func.data = 9
return func
@bind
def add(x, y):
return x + y
print(add(3, 10))
print(add.data)
Upvotes: 0
Reputation: 287
I got the answer,
pattern=r'\bROAD\b'
passing this a parameter to
def subst(pattern, replace_str, string):
#susbstitute pattern and return it
new=[re.sub(pattern,'RD',x) for x in string]
return new
we can get the op :)
Upvotes: 0
Reputation: 16404
No need for regex, just use replace
:
[x.replace('ROAD', 'RD') for x in addr]
If you only want to replace the ROAD
as a word, no in the middle, use:
[re.sub(r'\bROAD\b', 'RD', x) for x in addr]
Upvotes: 2
Reputation: 372
Using RegEx..
import re
count = 0
for x in addr:
addr[count] = re.sub('ROAD', 'RD', x)
count = count + 1
addr # just to print the result.
Upvotes: 0
Reputation: 82765
Using re
import re
addr = ['100 NORTH MAIN ROAD',
'100 BROAD ROAD APT.',
'SAROJINI DEVI ROAD',
'BROAD AVENUE ROAD']
for i, v in enumerate(addr):
addr[i] = re.sub('ROAD', 'RD', v) #v.replace("ROAD", "RD")
print addr
Output:
['100 NORTH MAIN RD', '100 BRD RD APT.', 'SAROJINI DEVI RD', 'BRD AVENUE RD']
Upvotes: 0