使用python从文件中提取特定字符串

2024-04-24 21:59:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个有几行的文件。在这些行中,我只选择以xxx开头的行。现在以xxx开头的行有如下模式:

xxx:(12:"pqrs",223,"rst",-90)
xxx:(23:"abc",111,"def",-80)

我只想提取第一个双引号中的字符串 i、 e.,“pqrs”和“abc”。你知道吗

任何使用regex的帮助都将不胜感激。你知道吗

我的代码如下:

with open("log.txt","r") as f:
         f = f.readlines()
    for line in f:
        line=line.rstrip()
        for phrase in 'xxx:':
             if re.match('^xxx:',line):
                 c=line
                 break

这个代码给了我一个错误


Tags: 文件字符串代码infordefwithline
3条回答
results = []
with open("log.txt","r") as f:
    f = f.readlines()
    for line in f:
        if line.startswith("xxx"):
            line = line.split(":")  # line[1] will be what is after :
            result = line[1].split(",")[0][1:-1] # will be pqrs
            results.append(result)

你想找以xxx开头的行吗 然后将行拆分为:。“:”后面的第一件事就是你想要的--直到逗号。那么你的结果就是那个字符串,但是去掉引号。不需要正则表达式。Python字符串函数就可以了

你的方向是对的。你知道吗

如果输入如此简单,可以使用regex组。你知道吗

with open("log.txt","r") as f:
    f = f.readlines()
    for line in f:
        line=line.rstrip()
        m = re.match('^xxx:\(\d*:("[^"]*")',line)
        if m is not None:
            print(m.group(1))

所有的魔力都在正则表达式中。你知道吗

^xxx:(\d*:(“[^”]*”)表示

从行首开始,匹配“xxx:(<;任意数字>;:”<;除“>;”以外的任何数字

由于序列“<;anything but”>;”用圆括号括起来,因此它可以作为一个组使用(通过调用m.group(1))。你知道吗

PS:下次一定要包括你得到的准确错误

您的代码缩进错误。你的f = f.readlines()前面有9个空格,而for line in f:前面有4个空格。它应该如下所示。你知道吗

import re
list_of_prefixes = ["xxx","aaa"]
resulting_list = []
with open("raw.txt","r") as f:
        f = f.readlines()
        for line in f:
            line=line.rstrip()
            for phrase in list_of_prefixes:
                if re.match(phrase + ':\(\d+:\"(\w+)',line) != None:
                    resulting_list.append(re.findall(phrase +':\(\d+:\"(\w+)',line)[0])

相关问题 更多 >