2017-06-23 54 views
1

提取字符串我有一个类似的文件:Python。从文件

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) 

不过我只会让我的第一个结果它发现。

有关如何在列表中以*结尾的所有示例实例的建议,我将不胜感激。

感谢

编辑:小的修正

+1

're'模块比'search()'具有更多的功能。 –

+0

use're.findall()' – Gahan

+0

如果你想提取样本*,那么你的正则表达式应该是'/ sample \ * /',否则它也会捕获'abcdefg *'。 – lkdhruw

回答

0

你可以试试这个:

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) 
+0

谢谢。我确实看到过这样的例子,但样本是一组7个字母数字字符。这就是为什么我去正则表达式。 此外,我需要他们没有*。还有其他类似于样本的实例,但最后没有*,我不需要这些实例。 – motionsickness

+0

@motionsickness啊,好的。我将编辑答案。我虽然只是在寻找“SAMPLE *”这个词)))。 – Nurjan

+0

美丽。两个问题。第3行用于任何目的? 你知道吗如果有什么方法可以在没有*的情况下添加样本?我可以稍后用替换将它们从文件中删除,但我想知道是否可以在没有它的情况下添加它们 – motionsickness

0

如果你想使用re让你的正则表达式的所有实例,您可以使用re.findall方法。

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

甲鲜为人知伴侣到findall功能是re.finditer函数,该函数将返回所有匹配的迭代器。你可以考虑这是另一种选择。如果你想更多地控制捕获组,这是使用的功能。

with open("file2.txt", "w") as myfile2: 
    for matchObj in re.finditer(r'[0-9A-Z]{7}\*', content): 
     myfile2.write(matchObj.group(0)) 

免责声明:我的回答没有解决的正则表达式的错误。

+0

SAMPLE有6个字母不是7. – Marichyasana

+0

@Marichyasana我应该提出一个声明,我不想修改用户的正则表达式。这是他们要做的。 –

0

从你的问题来看,如果你想在最后匹配美元符号,或者在最后匹配星号,那么在任何情况下你都可以使用反向引用反向引用来解决问题。如果你不知道它们是什么,你可以阅读更多有关后退参考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

注: 由于目前尚不清楚什么是你想匹配,您可能需要修改后引用在我的正则表达式,以匹配您的具体的投入。无论如何,这段代码snipet应该给你整体的想法如何解决这个问题。

+0

谢谢!我确实搞砸了我的问题,这使得读起来有点混乱。我会确保阅读后面的参考资料! – motionsickness