【问题标题】:Python Regex - How to account for end-of-line and end-of-file AND print only subsection of string?Python Regex - 如何考虑行尾和文件尾并仅打印字符串的子部分?
【发布时间】:2026-01-21 05:45:01
【问题描述】:

我有一个按 A、B 或 C 字母指示的名称列表和分配给他们的组。我想要做的是返回 A 组的所有成员。

我正在使用正则表达式查找以 A 结尾的所有行,然后我需要打印这些人的姓名,不包括组(A、B、C)

我遇到了一些问题:

  1. 最后一个条目在 A 组中,但这不是行尾而是文件尾,因此被忽略。
  2. 一些记录在行尾指示符之前包含一个空格,并且正在被传递。
  3. 我只想打印名称而不是组。

代码

import re


   
test_str = ("John Doe: A\n"
    "Jane Washington: B\n"
    "Geoffrey Grupp: A \n"
    "Joseph Rose: A\n"
    "Victoria Georges: C \n"
    "Simon Murphy: A")

regex = r"^.*[A]$\n"    
result= re.findall(regex, test_str, re.MULTILINE)
result

输出

Out[8]: ['John Doe: A\n', 'Joseph Rose: A\n']

如您所见,我想念 Geoffrey Grupp 和 Simon Murphy。此外,我不想在每个名称后打印“:A”。

【问题讨论】:

    标签: python regex


    【解决方案1】:

    你可以试试:

    import re
    
    test_str = ("John Doe: A\n"
        "Jane Washington: B\n"
        "Geoffrey Grupp: A \n"
        "Joseph Rose: A\n"
        "Victoria Georges: C \n"
        "Simon Murphy: A")
    
    regex = r"^(.*): A *$"     
    result= re.findall(regex, test_str, re.MULTILINE)
    print(result)
    

    它给出:

    ['John Doe', 'Geoffrey Grupp', 'Joseph Rose', 'Simon Murphy']
    

    解释:

    • '(.*)' 是一个捕获组 - 将返回的模式部分;
    • ' *' 匹配A 和行尾之间可能存在的空格字符。

    【讨论】:

    • 这正是我需要的,谢谢!而且解释很好。