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