【问题标题】:How to get "clean" match results in Python如何在 Python 中获得“干净”的匹配结果
【发布时间】:2017-01-08 15:32:21
【问题描述】:

我是个菜鸟,第一次编写代码并尝试边做边学。 我正在使用这个:

import re
f = open('aaa.txt', 'r')
string=f.read()
c = re.findall(r"Guest last name: (.*)", string)
print "Dear Mr.", c

返回

Dear Mr. ['XXXX']

我想知道,有没有办法得到类似的结果

Dear Mr. XXXX

相反?

提前致谢。

【问题讨论】:

  • 你只有一个名字到行尾是真的吗?我会使用\S+ 之类的东西,而不是.* - r"Guest last name: (\S+)"。或者 \S* 如果它可以是空的。无论如何,使用前检查结果。
  • 任何时候某个东西返回一个 ['something'] ,这意味着它在一个数组中,您需要使用 [n] 访问它,其中 n 是数组中元素的位置。
  • 幸运的是,我在 Python 中阅读的导出文档每行有 1 个字符串,所以我很容易使用正则表达式。但是,我仍然会尝试使其更准确,无论是对于实际代码还是学习正则表达式。

标签: python regex python-2.7 match


【解决方案1】:

你需要取列表中的第一项

print "Dear Mr.", c[0]

【讨论】:

    【解决方案2】:

    是的,如果您只期望一场比赛,请使用 re.search

    re.search(r"Guest last name: (.*)", string).group(1)`
    

    findall 如果您期望多个匹配项。您可能还希望将 ? 添加到您的正则表达式 (.*?) 以进行非贪婪捕获,但您可能还希望更具体一些,并在您想要的名称/短语之后捕获下一个可能的字符。

    【讨论】:

    • 谢谢,我会研究更复杂的正则表达式,现在我只是在构建骨架!我尝试使用 re.search,但它返回“<_sre.sre_match object at>”。我想这意味着它找到了匹配项以及匹配项在哪里,但我需要输出中的实际匹配项:)
    猜你喜欢
    • 1970-01-01
    • 2019-09-27
    • 2016-09-09
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    相关资源
    最近更新 更多