使用正则表达式从文本文件中查找特定字符串之前的单词

2024-05-02 15:48:27 发布

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

我对regex world很陌生。我拥有的是一个文本文件,我希望在其中的特定字符串(在本例中为“out”)之前找到一个特定单词,并将其存储到一个变量中。因此,我可以在代码的后面用其他内容替换它。下面我将把<&燃气轮机;围绕着这些有趣的单词,我只是为了突出重点而寻找。如果有人能给我指出正确的方向,那就太棒了。 我拥有的文本文件如下:在本例中,我希望找到用<>;。如果我的问题没有我所想的那么清楚,我会提前道歉

  neighbor 10.242.1.1 route-map LOCAL_PREF in
  neighbor 10.242.1.1 route-map <grn200_NWK> out   
  neighbor 10.244.206.2 route-map LOCAL_PREF in
  neighbor 10.244.206.2 route-map <blu330_NWK> out
  neighbor 10.242.120.202 route-map LOCAL_PREF in
  neighbor 10.242.120.202 route-map <grn200_NWK> out
.
.
.
the text file continues in this pattern

Tags: inltmapworldlocalout单词route
2条回答

假设文件名为file.txt,则可以获取所有行,并使用regex获取所需的所有数据

import re

with open('file.txt') as f:
    contents = f.readlines() # get the lines in a list

for x in contents: # iterate through each line
    matched = re.search(r'\S+ out$', x) # find results
    if matched:
        result.append(matched.group().split(" ")[0]) # save results
print(result)

结果:

['blu330_NWK', 'grn200_NWK']

这将通过获取文件中的所有行来打印您想要的所有结果,然后在其中循环,找到文本并在其中保存一个名为results的列表。然后您可以使用它来获取变量中的值

我相信这个解决方案更容易理解,因为它只是在各行之间循环并找到结果

您可以使用捕获组来查找所需的单词。根据单词的构成(emojis?),它可能略有不同。下面是一个扩展的定义-任何没有空格的东西。在本例中,我只在每行存储搜索结果。没有意味着没有对手。否则它是一个搜索对象,其中group(1)是找到的单词,start()是它的开始索引,end()是它的结束索引。举个例子,我把这个词改成“foo”

import re

with open('foo.txt') as fileobj:
    searches = [(re.search(r"(\S+) out$", line.strip()) for line in fileobj]

matched = []
for match, line in searches:
    if match:
        print("matched", match.group(1))
        matched.append(line[:match.start()] + "foo" + line[match.end():]

相关问题 更多 >