【问题标题】:returning string matching regular expression返回匹配正则表达式的字符串
【发布时间】:2013-11-04 17:39:30
【问题描述】:

我有一个文本文件,其中包含我想要提取与特定模式匹配的一行的行。我可以使用正则表达式搜索该行并返回它,然后再使用它吗?有没有比

更优雅的方式
for lines in file:
    if re.match(targetregex,line)!=None:
        print line

类似:

print re.matchingline(targetregex,file.read())

【问题讨论】:

  • 如果不匹配,您希望打印什么?
  • 我写错了吗?我看看。但是如果有匹配项,我想返回/打印它。对不起,但我没有看到错误。帮我。 !=None 意味着如果有匹配就会被打印出来,对吧?
  • 如果你真的想和None比较,你应该使用is not None而不是!= None(虽然在很多情况下,包括这个,你不会有一个非无论如何都没有假值,所以跳过检查并直接使用表达式的布尔值)
  • 我只是在接受的答案下面问了一个问题:我的误解是,if 条件必须为 True 才能导致结果。但显然如果它不是 False 就足够了。

标签: python regex search text return


【解决方案1】:

你可以像这样使用列表推导

print [line for line in file  if re.match(targetregex, line)]

它将返回与正则表达式匹配的行列表。

【讨论】:

  • 但是现在告诉我一些有关 if 条件如何工作的信息(我也可以将其作为一个单独的问题提出?):re.match(targetregex, line) 不返回 True。为什么 if re.match... 会输入 if 条件的结果?我认为它必须是 if (condition==True): Consequence
  • 在 python 的 if 中任何不是非假值的东西都将返回 true。在此处阅读更多信息docs.python.org/2/library/stdtypes.html#truth-value-testing
【解决方案2】:

您总是可以编写自己的函数来完成这项工作。

def matchingline(regex, file):
    compiled = re.compile(regex)
    for line in file:
        if compiled.match(line):
            return line

print(matchingline(targetregex, file))

【讨论】:

  • 我不确定是否只需要第一个。所以发电机可能是更好的选择。只是yield 而不是return...
【解决方案3】:

如果你想要一个数组,numpy.fromregex 看起来就足够优雅了。

【讨论】:

    猜你喜欢
    • 2012-03-11
    • 1970-01-01
    • 2020-04-24
    • 2012-06-05
    • 2013-12-25
    • 1970-01-01
    相关资源
    最近更新 更多