【问题标题】:How to replace a string with a pattern using reg.expression如何使用正则表达式将字符串替换为模式
【发布时间】:2018-02-20 13:29:12
【问题描述】:

我有一个地址列表:

addr = ['100 NORTH MAIN ROAD',
            '100 BROAD ROAD APT.',
            'SAROJINI DEVI ROAD',
            'BROAD AVENUE ROAD']

我需要在以下函数中完成替换工作:

def subst(pattern, replace_str, string):

通过在此函数之外定义一个模式并将其作为参数传递给 subst。

我需要这样的输出:

addr = ['100 NORTH MAIN RD',
            '100 BROAD RD APT.',
            'SAROJINI DEVI RD ',
            'BROAD AVENUE RD']

所有“ROAD”字符串都替换为“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

我已经完成了这个并且得到了以下错误

Traceback(最近一次调用最后一次):

文件“python”,第 23 行,在 文件“python”,第 20 行,在 main 文件“python”,第 7 行,在 subst

TypeError: 'str' 对象不能被解释为整数

【问题讨论】:

  • 在寻求帮助之前,请先尝试并展示您的尝试
  • 谢谢@sshashank124,我会附上。
  • def subst(pattern, replace_str, string): #susbstitute 模式并返回 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'] #创建图案这里实现pattern=r'^(ROAD)' #使用subst函数将'ROAD'替换为'RD.',存储为new_address new_address=subst(pattern,'RD',addr) return new_address print(main())
  • 将其编辑到问题本身中

标签: python python-3.x regex-group


【解决方案1】:

不需要正则表达式,只需使用replace

[x.replace('ROAD', 'RD') for x in addr]

如果你只想将ROAD替换为一个单词,中间没有,使用:

[re.sub(r'\bROAD\b', 'RD', x) for x in addr]

【讨论】:

  • 是的,我怎样才能将这个 r'\bROAD\b' 作为参数(模式)传递给那个 subst 函数?
  • @prasannakumar 按原样通过。
  • Tysm :) 我得到了操作
【解决方案2】:

使用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

输出

['100 NORTH MAIN RD', '100 BRD RD APT.', 'SAROJINI DEVI RD', 'BRD AVENUE RD']

【讨论】:

    【解决方案3】:

    使用 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.
    

    【讨论】:

    • 是的,我需要使用 reg.expression 来传递,而不是直接将 'road' 传递给 re.sub() 方法。
    • @prasannakumar 没听懂你说的。因此,您必须从字符串中提取模式“ROAD”,然后将其替换为“RD”?我 认为 您正在尝试做的是迭代 addr 并在执行此操作时,使用正则表达式替换 'ROAD' BY 'RD'。如果是这种情况,我不明白你对答案不满意:/
    • 谢谢 :) 我得到了答案,btw pattern=r'\bROAD\b' 这是我需要的
    【解决方案4】:

    我得到了答案,

    pattern=r'\bROAD\b'
    

    将这个参数传递给

    def subst(pattern, replace_str, string):
    
        #susbstitute pattern and return it
        new=[re.sub(pattern,'RD',x) for x in string]
        return new
    

    我们可以得到 op :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-07
      • 2015-02-27
      相关资源
      最近更新 更多