【问题标题】:please help in this python re data structure请帮助这个python re数据结构
【发布时间】:2020-09-25 08:01:43
【问题描述】:

assets/grades.txt 中的数据集文件包含以行分隔的人员列表以及他们在班级中的成绩。创建一个正则表达式以生成仅在课程中获得 B 的学生的列表。

def grades():
    with open ("assets/grades.txt", "r") as file:
        grades = file.read()
        for line in grades:
            line = line.rstrip()
            if re.search('^X\S*: [0-9.]+', line):
            print(line)
    
         

assert len(grades()) == 16

【问题讨论】:

  • 请提供更多详细信息,例如grades.txt 的内容、您的预期输出以及当前代码出了什么问题。
  • 这是grade.txt的一部分: Ronald Mayr: A Bell Kassulke: B Jacqueline Rupp: A Alexander Zeller: C Valentina Denk: C Simon Loidl: B Elias Jovanovic: B Stefanie Weninger: A Fabian Peer: C Hakim Botros: B Emilie Lorentsen: B Herman Karlsen: C
  • 尝试使用^.*B$ 代替当前的正则表达式。 Demo

标签: data-science python-re


【解决方案1】:

我知道你做错了什么我的朋友

首先 成绩是你不需要 for 循环来获取它们的行 其次,我不知道你为什么使用 '^X\S*: [0-9.]+' 因为它似乎不符合你的要求 您需要查看成绩是数字还是正常成绩(A B C D) 并且从你需要得到 B 的问题中出现 所以我们可以说最终的代码是 寻找

'([A-Z][a-z]+ [A-Z][a-z]+): B'

我猜最终的代码是

def grades():
    with open ("assets/grades.txt", "r") as file:
        grades = file.read()
    w = '([A-Z][a-z]+ [A-Z][a-z]+): B'
    grades = re.findall(w , grades)
    return grades

【讨论】:

  • 欢迎您的加入
【解决方案2】:
import re
def grades():
    with open ("assets/grades.txt", "r") as file:
        grades = file.read()
        list_of_grades = grades.split('\n')
        print(list_of_grades)        
        list_of_students = [ li.split()[0] + ' ' + li.split()[1] for li in list_of_grades if li.split()[-1] == 'B']
        print(list_of_students)        
    
    return list_of_students

【讨论】:

    【解决方案3】:

    这对我很有效

    import re
    def grades():
        with open ("assets/grades.txt", "r") as file:
            grades = file.read()
    
        # YOUR CODE HERE
        result = re.findall(': B', grades)
        return result
    
    grades()
    len(grades())
    

    【讨论】:

      【解决方案4】:

      这对我来说效果很好

      import re
      def grades():
          with open ("assets/grades.txt", "r") as file:
              grades = file.read()
          
          # YOUR CODE HERE
          pattern=re.findall('([A-Za-z]+ [A-Za-z]+): B',grades)
          return pattern
              
          
          #raise NotImplementedError()
      

      您可以通过运行以下代码来检查

         assert len(grades()) == 16
              
      

      要了解更多关于正则表达式的信息,请访问:https://docs.python.org/3/library/re.html#module-re

      【讨论】:

        【解决方案5】:

        这就是我所做的

            import re
        def grades():
            with open ("assets/grades.txt", "r") as file:
                grades = file.read()
        
            # YOUR CODE HERE
            result = re.findall('\w* \w*: B',grades )
            return result
        print(grades())
        

        【讨论】:

        • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
        【解决方案6】:
        import re
            def grades():
            with open ("assets/grades.txt", "r") as file:
                grades = file.read()
        
            only_B_grades = re.findall("[A-Z][a-z]* [A-Z][a-z]*\: [B]",grades)
            person = [grade_B.split(':')[0] for grade_B in only_B_grades]
            return person
            raise NotImplementedError()
        
        grades()
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-12-03
          • 2011-03-29
          • 1970-01-01
          • 2022-12-01
          • 1970-01-01
          • 2014-02-14
          相关资源
          最近更新 更多