【问题标题】:Match and extract substrings inside double quotes with regex使用正则表达式匹配和提取双引号内的子字符串
【发布时间】:2018-03-06 00:25:11
【问题描述】:

我有一个这样的字符串列表data = ['This is the sentence "Hello" by writer "MK"', '2 Worlds [Harry]']

我只想提取"Hello,这就是我所做的:

import re
s = re.match('This is the sentence (.*) by writer', data[0])
s

但我得到的不是"Hello,而是<_sre.SRE_Match object; span=(0, 38), match='This is the sentence "Hello" by writer'>

谁能告诉我怎么写正确?

【问题讨论】:

  • 您是否正在尝试实现这样的目标? eval.in/867424
  • 当您打印 s 时,它会打印正则表达式 Match 对象 - 就像您编写一个函数,然后打印该函数的名称而不调用它,您将获得字符串表示形式对于该对象,不是函数将返回的内容。如果你想访问你用(.*) 表示的组,你必须明确地访问:print(s.group(1))
  • 您标记的解决方案在正则表达式方面不是最理想的。如果您想改进您的正则表达式,请参阅:stackoverflow.com/a/46398384/4909087

标签: python regex match


【解决方案1】:

当您打印 s 时,它会打印正则表达式 Match 对象 - 就像您编写一个函数,然后在不调用它的情况下打印该函数的名称一样,您将获得该函数的字符串表示形式,而不是函数将返回:

def hello():
    return 'hello!'

print(hello)
>>> <function hello at 0x7f570e3aa9b0>

如果你想访问你用 (.*) 表示的组,你必须明确地访问它:

s = re.match('This is the sentence (.*) by writer', data[0])
print(s.group(1))
>>>"Hello

此外,您可以通过以下方式检查是否有匹配的组,如果没有匹配则避免 AttributeError:

 s = re.match('This is the sentence (.*) by writer', data[0])
 if s:
     print(s.group(1))

【讨论】:

  • 每次编辑后,这个答案都越来越接近我的答案......希望能提供一些归属或根本不添加它,谢谢。
  • 您要归因于什么?我的评论与此答案基本相同,是在您回答前 2 分钟发布的。
  • 提到 AttributeError 的部分。一个简单的“正如coldspeed 在他们的回答中提到的那样,您可以检查...”就足够了。
  • 我会通过的 - 当我添加它时,我什至没有看你的答案
  • 说起来很容易,但事实仍然是它很像我的答案,它是在我添加我的答案后添加的,所以你可以理解我来自哪里:)跨度>
【解决方案2】:

're.match' 返回一个 'MatchObject',你需要使用 .group(1) 从匹配中获取数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-25
    • 2016-04-18
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 2022-10-01
    相关资源
    最近更新 更多