python-3.x 如何使用reg.expression将字符串替换为模式

fumotvh3  于 2022-12-14  发布在  Python
关注(0)|答案(5)|浏览(134)

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

lrpiutwd

lrpiutwd1#

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]
9nvpjoqh

9nvpjoqh2#

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']
q43xntqr

q43xntqr3#

  • 正在使用*正则表达式..
import re
count = 0
for x in addr:
    addr[count] = re.sub('ROAD', 'RD', x)
    count = count + 1

addr    # just to print the result.
uz75evzq

uz75evzq4#

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 :)

cgyqldqp

cgyqldqp5#

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)

相关问题