python从文件中提取字符串

python从文件中提取字符串,python,regex,Python,Regex,我有一个类似的文件: RANDOMTEXTSAMPLE* $SAMPLERANDOMTEXT RANDOMSAMPLE*TEXT 我试图提取所有在末尾有*的“sample”实例,并将其放入一个列表中 我试过这样的方法: 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

我有一个类似的文件:

RANDOMTEXTSAMPLE*
$SAMPLERANDOMTEXT
RANDOMSAMPLE*TEXT
我试图提取所有在末尾有*的“sample”实例,并将其放入一个列表中

我试过这样的方法:

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)
然而,我只能得到它发现的第一个结果

对于如何获得列表中以*结尾的所有示例实例而不将*添加到列表中的任何建议,我将不胜感激

谢谢

编辑:小更正

您可以尝试以下操作:

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)

从您的问题来看,不清楚您是否希望在末尾匹配美元符号,或者在末尾匹配星号,在任何情况下,您都可以使用反向引用反向引用来解决问题。如果您不知道它们是什么,您可以阅读更多关于反向引用的信息

这会给你一份样品清单。您可以看到regex演示

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

re
模块的功能不仅仅是
search()
。使用
re.findall()
如果你想提取sample*那么你的正则表达式应该是
/sample\*/
,否则它也会捕获
abcdefg*
。最后是$,还是最后是*?请参见谢谢。我确实见过一些这样的例子,但示例是一组7个字母数字字符。这就是我去regex的原因。还有,我需要不带*的。还有其他类似于示例的实例,但末尾没有*并且我不需要它们。@Motionsick啊,好的。我将编辑答案。我以为你在找单词
SAMPLE*
only))。漂亮。两个问题。三号线有用吗?你知道有没有办法在没有*的情况下添加样品?我可以稍后通过替换将它们从文件中删除,但我想知道是否可以不添加它们it@motionsickness否,不需要包含变量
text=''
的第3行。在将行放入
samples
列表之前,可以使用
line=line.replace('*','')
。但是,整行内容(包括
示例
和其他文字)将保留,但星号将被删除。谢谢!我确实把我的问题弄得有点乱,读起来有点混乱。我一定要看后面的参考资料!
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))