【问题标题】:Python. extracting string from file [duplicate]Python。从文件中提取字符串[重复]
【发布时间】:2017-11-26 14:03:27
【问题描述】:

我有一个类似的文件:

RANDOMTEXTSAMPLE*
$SAMPLERANDOMTEXT
RANDOMSAMPLE*TEXT

我正在尝试提取所有末尾带有 * 的“样本”实例并将其放入列表中。

我尝试过这样的事情:

import re

with open('file1.txt') as myfile:
content = myfile.read()

text = re.search(r'[0-9A-Z]{7}\*', content)
with open("file2.txt", "w") as myfile2:
myfile2.write(text)

但是我只会得到它找到的第一个结果。

关于如何在列表中获取所有以 * 结尾的示例实例而不将 * 添加到列表中的任何建议将不胜感激。

谢谢

编辑:小修正

【问题讨论】:

  • re 模块的功能不仅仅是search()
  • 使用re.findall()
  • 如果你想提取样本*,那么你的正则表达式应该是/sample\*/,否则它也会捕获abcdefg*
  • $ 结尾,还是 * 结尾?

标签: python regex


【解决方案1】:

你可以试试这个:

import re

samples = []

with open('file1.txt') as myfile:
    for line in myfile.readlines():
        if re.search(r'[0-9A-Z]{6}\*', line):                
            samples.append(line)

# print('SAMPLES: ', samples)

with open("file2.txt", "w") as myfile2:
    for s in samples:
        myfile2.write(s)

【讨论】:

  • 谢谢。我确实见过一些这样的例子,但样本是一组 7 个字母数字字符。这就是我去正则表达式的原因。另外,我需要它们没有 *.还有其他实例与示例类似,但末尾没有 *,我不需要这些。
  • @motionsickness 啊,好的。我将编辑答案。我以为你只是在寻找 SAMPLE* 这个词)))。
  • 美丽。两个问题。第 3 行有什么用吗?你知道是否有任何方法可以在没有 * 的情况下添加样本?我可以稍后通过替换将它们从文件中删除,但我想知道是否可以在没有它的情况下添加它们
  • @motionsickness 否,不需要包含变量 text = '' 的第 3 行。在将行放入samples 列表之前,您可以使用line =line.replace('*', '')。但是,包括sample等字样的整行会保留,但星号会被去掉。
【解决方案2】:

从您的问题来看,不清楚您是要在末尾匹配美元符号还是在末尾匹配星号,无论如何您都可以使用反向引用反向引用来解决问题。如果你不知道它们是什么,你可以阅读更多关于反向引用here

import re
with open ("file1.txt", "r") as myfile:

    samples = []
    pattern = re.compile(r'([a-zA-Z]+)\*') 
    for line in myfile.readlines():

        for matched_object in pattern.finditer(line):
           samples.append(matched_object.group(1))

这将为您提供样本列表。你可以看到正则表达式演示here

注意: 由于不清楚您要匹配什么,您可能需要在我的正则表达式中修改反向引用以匹配您的具体输入。无论如何,这段代码片段应该让您全面了解如何解决这个问题。

【讨论】:

  • 谢谢!我确实把我的问题搞砸了,这使得阅读起来有点混乱。我会确保阅读有关反向引用的信息!
猜你喜欢
  • 2020-10-25
  • 1970-01-01
  • 1970-01-01
  • 2014-07-26
  • 1970-01-01
  • 2021-05-19
  • 1970-01-01
  • 2017-09-24
  • 2018-06-11
相关资源
最近更新 更多