Python 3.x 从行中删除单词,并使用python将行保存在文件中

Python 3.x 从行中删除单词,并使用python将行保存在文件中,python-3.x,substring,regexp-replace,Python 3.x,Substring,Regexp Replace,我需要以下线路: test_list=“root/abc_test.list someText tests/long_test.list someText tests/h2.list” 改为: test_list="tests/My_test.list" **.list可能出现在行中的任何位置 实际上,需要做的是找到每个包含“.list”的单词,如果它很长,则将其更改为“My\u test.list”,并在其更改后,删除包含“”的所有其他子字符串。list”接受已更改的子字符串 为了解决这个

我需要以下线路: test_list=“root/abc_test.list someText tests/long_test.list someText tests/h2.list”

改为:

test_list="tests/My_test.list" 
**
.list
可能出现在行中的任何位置

实际上,需要做的是找到每个包含“.list”的单词,如果它很长,则将其更改为“
My\u test.list”
,并在其更改后,删除包含“
”的所有其他子字符串。list”
接受已更改的子字符串

为了解决这个问题,我将单词long_test.list改为xXxXxX,然后删除所有的.list单词,然后将xXxXxX改回
My_test.list
。 为此,我使用了以下代码:

  with in_place.InPlace('RUN_NEW') as file:
      for line in file:
          line = line.replace('long_test_list', 'xXxXxX')
          file.write(line)
      file.close()

  with open("RUN_NEW","r+") as f:
      new_f = f.readlines()
      f.seek(0)
      for line in new_f:
          line = str(line).split(' ')
          print(line)
          print(len(line))
          for word in line:
              if ".list" not in word:
                  f.write(word)
      f.close()

   with open("file.txt","r+") as f:
      new_f = f.readlines()
      f.seek(0)
      for line in new_f:
          line = str(line).split(' ')

          for k in line:
               if ".list" not in k:
                  s=' '
                  print(s.join(k.split('"')))
                  #f.write(s.join(k.split('"')))
上面代码的问题是,分割符(“”)后面的行如下所示
['set','test\u list=“tests/long\u test.list”,“tests/h2.list”]
, 当我尝试将其重新加入时,它会在每个不包含
.list
的子字符串后使用
“\n”
保存它。我曾考虑使用正则表达式,但这只会删除
.list
本身,即所有子字符串。
我还想保存引号,而不在拆分过程中删除它们。

这个小脚本演示了如何在一行中进行替换。使用re.sub查看读入的行(此处模拟),并查找双引号,后跟任意数量的字符组成的可选组,以空格结尾(如果目标路径位于字符串的开头,则为可选)后跟捕获的任意数量的字符组,后跟目标文字字符串“long_test.list“后跟任意数量的以双引号结尾的字符。如果找到该匹配项,请将其替换为双引号,后跟第二个捕获组,后跟文字“My_test.list”,然后是结束双引号。如果未找到匹配项,则将返回读入的整行。”

#!/usr/bin/env python

import re

line = 'test_list="root/abc_test.list someText tests/long_test.list someText tests/h2.list"'

print(line)

line = re.sub(r'"(.* )?(.*)long_test.list.*"', r'"\2My_test.list"', line)

print(line)

$ ./test.py
test_list="root/abc_test.list someText tests/long_test.list someText tests/h2.list"
test_list="tests/My_test.list"
$ 

非常感谢!如何更改此regexp以保留现有的someText?哪个“someText”?在目标字符串之前或之后?您需要另一个捕获组…在.line='test\u list=“root/abc\u test.list someText tests/long\u test.list someText tests/h2.list”之前和之后,这样您的预期输出就是
test\u list=“someText测试/My_test.list someText”
?someText是多个单词吗?这不是您原始帖子中的要求。请注意范围蔓延,并确保在工作开始前拼写好规范!哈哈