我有一个类似的文件:
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)
但是我只会得到它发现的第一个结果。
如何在列表中以*结尾的所有样本实例,而不将*添加到列表中,我们将不胜感激。
由于
编辑:小修正
答案 0 :(得分: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)
答案 1 :(得分: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应该让你全面了解如何解决这个问题。