【发布时间】: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