Python,从一行中提取所有表达式的问题(仅提取第一个)

标签 python

我是一个 python 新手,目前正在编写一个 python 脚本来从文本中提取时间表达式并将其转换为实际日期。

我有时在一行中有多个时间表达式,但是我的代码仅检索第一个表达式。每个表达式都以“{”开头并以“}”结尾。

我已经尝试了一些东西(while 循环、for 循环),但我找不到应该如何使其工作。我也尝试将行分成两部分,但是脚本错误......

这是我的功能:

    for in_line in file: 
       with open('file.txt', 'a+') as outfile:
           if '{' in in_line: 
               start_expression = in_line.find('{')
               start_values = in_line.find("values=")
               end = in_line.find("}")
               expression_temporelle = in_line[start_expression:end+1]
               values = in_line[start_values+7:end]
               print expression_temporelle
               self.retrieve_expression(expression_temporelle, values, in_line, outfile)

(注意:其余代码功能,如果表达式位于不同行,则所有表达式都会正确获取和转换)

这是它打印的内容:(我在另一个程序上运行原始文本,该程序将其呈现为这种格式)

    {20 avril 2015,20 avril 2015.Time+Date+format=JJ_mois_AAAA+values=20+avril+2015} // temporal expression extracted
    Reçu le [20-4-2015], CONCERNE : XXXXXXXXXXXXXXXXXXXXXXXXXX ({07/04/1961,07/04/1961.Time+Date_naissance+format=JJ-MM-AAAA+values=07-04-1961}) // new sentence with only the first expression transformed

感谢您的帮助:)

抱歉,我意识到我不太清楚发送给脚本的内容等。 我现在给脚本提供一个文本(对于上面显示的答案),我给出“Reçu le {20 avril 2015,20 avril 2015.Time+Date+format=JJ_mois_AAAA+values=20+avril+2015} CONCERNE : XXXXXXXXXXXXXXXXXXXXXXXXXXX ({07/04/1961,07/04/1961.Time+Date_naissance+format=JJ-MM-AAAA+values=07-04-1961})”到脚本中(原文说“Reçu le 20 avril 2015,关注:XXXXXXXXXXXXXXXXXXXXXXXXXX(né le 07/04/1961)”,但已通过另一个程序修改)。

所以问题是我只提取行中的第一个时间表达式...

最佳答案

文件 abc.txt 中包含以下数据:

Reçu le {20 avril 2015,20 avril 2015.Time+Date+format=JJ_mois_AAAA+values=20+avril+2015} CONCERNE : XXXXXXXXXXXXXXXXXXXXXXXXXX ({07/04/1961,07/04/1961.Time+Date_naissance+format=JJ-MM-AAAA+values=07-04-1961})
Reçu le {21 avril 2015,20 avril 2015.Time+Date+format=JJ_mois_AAAA+values=21+avril+2015} CONCERNE : XXXXXXXXXXXXXXXXXXXXXXXXXX 
Reçu le {22 avril 2015,20 avril 2015.Time+Date+format=JJ_mois_AAAA+values=22+avril+2015} CONCERNE : XXXXXXXXXXXXXXXXXXXXXXXXXX 
Reçu le {23 avril 2015,20 avril 2015.Time+Date+format=JJ_mois_AAAA+values=23+avril+2015} CONCERNE : XXXXXXXXXXXXXXXXXXXXXXXXXX ({07/04/1961,07/04/1961.Time+Date_naissance+format=JJ-MM-AAAA+values=07-04-1961})

文件中每一行的简单 str.split('}') 即可完成这项工作

infile = open('abc.txt','r')
line_count = 0
for in_line in infile:
    line_count +=1
    parts = in_line.split('}')
    part_count = 0
    for part in parts:
        if '{' in part:
            part_count +=1
            start_expression = part.find('{')
            start_values = part.find("values=")
            expression_temporelle = part[start_expression:]
            values = part[start_values+7:]
            print "line", str(line_count)
            print "    part", str(part_count)
            print "        ", expression_temporelle+"}" #add back the } for printing
infile.close()

结果:

line 1
    part 1
         {20 avril 2015,20 avril 2015.Time+Date+format=JJ_mois_AAAA+values=20+avril+2015}
line 1
    part 2
         {07/04/1961,07/04/1961.Time+Date_naissance+format=JJ-MM-AAAA+values=07-04-1961}
line 2
    part 1
         {21 avril 2015,20 avril 2015.Time+Date+format=JJ_mois_AAAA+values=21+avril+2015}
line 3
    part 1
         {22 avril 2015,20 avril 2015.Time+Date+format=JJ_mois_AAAA+values=22+avril+2015}
line 4
    part 1
         {23 avril 2015,20 avril 2015.Time+Date+format=JJ_mois_AAAA+values=23+avril+2015}
line 4
    part 2
         {07/04/1961,07/04/1961.Time+Date_naissance+format=JJ-MM-AAAA+values=07-04-1961}

您可以使用 re 而不是标准拆分,即 parts = re.split('(})', in_line) ,这会留下 } 在列表中。

>>> x = "Reçu le {20 avril 2015,20 avril 2015.Time+Date+format=JJ_mois_AAAA+values=20+avril+2015} CONCERNE : XXXXXXXXXXXXXXXXXXXXXXXXXX ({07/04/1961,07/04/1961.Time+Date_naissance+format=JJ-MM-AAAA+values=07-04-1961})"
>>> s = x.split('}')
>>> s
['Re\xc3\xa7u le {20 avril 2015,20 avril 2015.Time+Date+format=JJ_mois_AAAA+values=20+avril+2015', ' CONCERNE : XXXXXXXXXXXXXXXXXXXXXXXXXX ({07/04/1961,07/04/1961.Time+Date_naissance+format=JJ-MM-AAAA+values=07-04-1961', ')']
>>> s = re.split('(})', x)
>>> s
['Re\xc3\xa7u le {20 avril 2015,20 avril 2015.Time+Date+format=JJ_mois_AAAA+values=20+avril+2015', '}', ' CONCERNE : XXXXXXXXXXXXXXXXXXXXXXXXXX ({07/04/1961,07/04/1961.Time+Date_naissance+format=JJ-MM-AAAA+values=07-04-1961', '}', ')']

关于Python,从一行中提取所有表达式的问题(仅提取第一个),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43569689/

相关文章:

python - 如何使用 AWS Python SDK Boto 3 等待 Elastic Beanstalk 事件

python - AttributeError:实例没有属性

python - 在 conda/MacOS 上使用 pip 安装 mmh3 包

python - Pandas:按 A 列对数据进行分组,按 B 列的现有值过滤 A

Python pip 安装错误(feather 格式)

python - 查找特定文件并执行存储过程

python将函数传递给类

python - Tensorflow - 类型错误 : 'int' object is not iterable

python - wxpython固定帧大小?

python - Matplotlib 表格格式化