【问题标题】:Problems with basic python syntax for regular expressions [closed]正则表达式的基本python语法问题[关闭]
【发布时间】:2016-04-12 08:32:16
【问题描述】:

我正在为生物信息学考试而学习,但我的教授做了一些我不明白的事情。我试过查找它,但有人可以用非程序员语言解释吗?我真的尝试过查找事情来理解,但我有点无能为力。我的问题是关于这个的;

import re
line = "Cats are smarter than dogs"
matchObj = re.match(r'(.*) are (.*?)*',line,re.M|re.I)

if matchObj:
  print("matchObj.group():",matchObj.group())
  print("matchObj.group():",matchObj.group(1))
  print("matchObj.group():",matchObj.group(2))

我的问题:

  • (.*) 是做什么用的,我猜你是在尝试匹配“cats”,但为什么不直接输入cats?我明白那个 。表示“任何字符”,但我不明白 * 是做什么的

  • 组合 (.?)' 有什么作用?

  • re.M|re.I 是做什么的?

非常感谢!我开始有点绝望了。我的思维无法以正确的方式来理解我认为的这类事情。

【问题讨论】:

  • 您的问题概括为“什么是正则表达式”,这是一种上课方式,而不是在几段中回答的那种事情。快速版本是(.*) 匹配零个或多个任意字符并将其保存在一个组中。 (.*?)* 做同样的事情,但更喜欢更少的字符,并且允许整个组重复零次或多次。 re.M|re.I 允许正则表达式查看多行并忽略匹配中的大小写。
  • 在 www.regular-expression.info 上有一个关于正则表达式的教程。
  • 如果你不知道 * 做什么,你需要阅读基本的正则表达式教程。你不会在这里得到勺子。
  • 您会发现regex101 非常有趣。您可以交互式地测试正则表达式,并获得解释!
  • 请注意,(.*?) 在表达式末尾是愚蠢的,因为它只会给你一个空字符串。用* 重复它没有帮助。

标签: python regex match bioinformatics


【解决方案1】:

我会给你第一个,这些实际上就像你在野外看到的正则表达式一样简单:)

. 是任意字符

* 无限次

所以... (.*) 是任意字符无限次

这里是关于正则表达式的 python 文档的链接https://docs.python.org/2/library/re.html... 您可以轻松查找每个字符。如果遇到困难,请尝试一个并在此处回复您的问题:)

【讨论】:

  • 谢谢!我知道什么。和 * 的意思是,但我想我应该问为什么以这种方式在这里使用它?为什么不直接找猫这个词呢?
  • 它是你的教授关心的句子中那个位置的词......而不是特定的词“猫”。因此,如果除了“cats”所在的那个词之外,你有一百个完全相同的句子,那么你将能够解析所有这些句子并得到位于那个位置的词。正则表达式通常是关于知道 WHERE 某物会在哪里,但不知道 WHAT 会是什么。这有帮助吗?
  • 所以 matchObj 不是要在数据库中找到那个确切的句子或什么?他只是在寻找可能出现在句子中那个位置的每一个单词?
  • 正确,他们给你的例子可能太琐碎,无法真正揭示他们这样做的原因......但你可以尝试另一个句子来证明它......kittens are cuter than cats。任何有一个单词后跟are 的句子都将匹配这个正则表达式。这就是他们试图向你展示的一切。
  • 非常感谢您的明确回答!现在更有意义了:)
猜你喜欢
  • 2010-10-27
  • 2014-02-21
  • 1970-01-01
  • 2015-10-22
  • 2017-11-13
  • 2012-08-11
  • 1970-01-01
  • 1970-01-01
  • 2012-02-24
相关资源
最近更新 更多