在一个字符串中搜索并消除在附带列表中发现的位置

2024-10-01 02:27:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含文本的字符串和一个附带的列表,其中包含关于第一个列表中每个字符的信息。例如:

text="this, and this are test elems"
textInfo=[1, 4, 6, 7, ,8, 3, 6, 2, 4, ... 7, 0]

列表中的每个位置引用的字符都是文本,即len(text)==len(textInfo),其中textInfo[i]有关于文本中第i个字符的信息

我想消除文本中“this”的实例,并消除列表中引用这些字符的位置(即4个位置,对应于关于“t”、“h”、“I”和“s”的信息)

我的暴力方法是这样的:

tmpText = text
tmpTextInfo = textInfo
m = re.search("this", tmpText)
while m:
  tmpText = tmpText[0:m.start()] + tmpText[m.end():]
  tmpTextInfo =  tmpTextInfo[0:m.start()] + tmpTextInfo[m.end():]
  m = re.search("this", tmpText)
text = tmpText
textInfo = tmpTextInfo

这起作用并达到我的期望。例如: 如果输入是

text = "this test this is"
textInfo = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]

然后将生成文本和textInfo字符串

text=" test  is"
textInfo=[4, 5, 6, 7, 8, 9, 14, 15, 16]

但在我看来,这根本不是一个pythonic,我相信有更紧凑和有效的方法来做这件事,是吗


Tags: 方法字符串texttest文本re信息列表
1条回答
网友
1楼 · 发布于 2024-10-01 02:27:47

如果你真的需要一个正则表达式,我想我不会有什么不同。您最多只能存储要保留的字符串列表并在末尾连接它们,但这并不能提高可读性

如果问题是删除由空格或标点符号分隔的标记,那么可以使用生成器生成一对具有相应textInfo的标记。然后,您可以根据令牌(或者附加信息,如果您愿意)进行过滤,并重新组合这两个列表。但我不确定它会带来什么,真的

相关问题 更多 >