【问题标题】:How to replace a string in a list of strings with regex?如何用正则表达式替换字符串列表中的字符串?
【发布时间】:2021-04-06 18:43:51
【问题描述】:
my list = [
 '<instance id="line-nw8_059:8174:">',
 '  advanced micro devices inc sunnyvale calif and siemens ag of west germany '
 'said they agreed to jointly develop manufacture and market microchips for '
 'data communications and telecommunications with an emphasis on the '
 'integrated services digital network        the integrated services digital '
 'network or isdn is an international standard used to transmit voice data '
 'graphics and video images over telephone <head>line</head>   ',
 '<instance id="line-nw7_098:12684:">',
 '  in your may 21 story about the phone industry billing customers for '
 'unconnected calls i was surprised that you did not discuss whether such '
 'billing is appropriate    a caller who keeps a <head>line</head> open '
 'waiting for a connection uses communications switching and transmission '
 'equipment just as if a conversation were taking place  ',
 '<instance id="line-nw8_106:13309:">'
]

我必须用空格替换所有&lt;instance id="line-nw8_106:13309:"&gt;(任何变体),并将它们全部添加到自己的列表中。我已经想出了如何使用正则表达式将它们添加到自己的列表中,如下所示:

instanceList =[]
    instanceMatch = '<instance id="([^"]*)"'
    for i in contentsTestSplit:
        matchy = re.match(instanceMatch,i)
        if matchy:
            instanceMatchy = matchy.group(0)
            instanceList.append(instanceMatchy)
    
    print("instance list: ",instanceList)
 

所以这行得通,但我不知道如何用空格替换所有这些?我已经尝试过这个以及使用替换方法,但它不起作用,任何帮助都会得到帮助:

instanceList =[]
    instanceMatch = '<instance id="([^"]*)"'
    pat = re.compile(r'<instance id="([^"]*)"')
    for i in contentsTestSplit:
        matchy = re.match(instanceMatch,i)
        if matchy:
            instanceMatchy = matchy.group(0)
            instanceList.append(instanceMatchy)
            i = pat.sub("",i)
            
    
    print("instance list: ",instanceList)

也尝试过这个:但它不会替换,但会准确定位出现的位置

for i in contentsTestSplit:
        if i.startswith("<instance id="):
            i.replace(i,"")

【问题讨论】:

  • 的任何出现/变化
  • 它真的会像那样分成字符串吗?如果是这样,那么你不能简单地做if i.startswith("&lt;instance"):吗?
  • 这可以识别它们的位置,但我仍然不知道如何替换它?我试过这个:``` for i in contentsTestSplit: if i.startswith("
  • 你可以试试:for i,line in enumerate(contentsTestSplit:/if line.startswith("&lt;instance"):/contentsTestSplit[i] = ""。在这种情况下,最好将数据复制到包含更改的新列表中,但这应该可行。

标签: python regex list


【解决方案1】:

您可以使用带替换的正则表达式将所有实例替换为空格。然后,您可以向它传递一个自定义函数以返回匹配项并将结果附加到您的实例列表中。

def _sub(match):
    instanceList.append(match[0])
    return ''
    
instanceList =[]
instanceMatch = '<instance id="([^"]*)"'
for i in my_list:
    re.sub(instanceMatch, _sub, i)

我不知道你想对处理后的数据做什么,但re.sub(instanceMatch, _sub, i) 会返回你的替换文本。

【讨论】:

    【解决方案2】:

    我想知道为什么 id="([^"])" 代表一个字符串,如果 id="[^"]" 它什么都不代表。什么是 () 的使用。

    【讨论】:

      猜你喜欢
      • 2012-04-26
      • 1970-01-01
      • 2017-02-04
      • 1970-01-01
      • 1970-01-01
      • 2021-11-29
      相关资源
      最近更新 更多