TIM*_*MEX 3 python regex syntax
我明白那个
* = "zero or more"
? = "zero or more" ...what's the difference?
Run Code Online (Sandbox Code Playgroud)
另外,?:<<我的书使用了它,它说它是一个"微妙",但我不知道它们到底是做什么的!
正如Manu所说,?意味着"零或一次".它是一样的{0,1}.
而且?:,您可能意味着(?:X),其中X是其他字符串.这被称为"非捕获组".通常,当您将括号括在某个东西周围时,可以将这些括号匹配的内容进行分组.例如,正则表达式.(.).(.)匹配任意4个字符(换行符除外)并将第二个字符存储在组1中,将第四个字符存储在组2中.但是,当您执行以下操作时:.(?:.).(.)只有第四个字符存储在组1中,所有bewteen (?:.)都匹配,但不是"记住".
一个小小的演示:
import re
m = re.search('.(.).(.)', '1234')
print m.group(1)
print m.group(2)
# output:
# 2
# 4
m = re.search('.(?:.).(.)', '1234')
print m.group(1)
# output:
# 4
Run Code Online (Sandbox Code Playgroud)
你可能会问自己:"为什么要使用这个非捕获组?".好吧,有时,你想在两个字符串之间进行OR,例如,你想匹配字符串"www.google.com"或"www.yahoo.com",然后你可以这样做:www\.google\.com|www\.yahoo\.com,但更短的是:www\.(google|yahoo)\.com当然.但是如果你不打算对这个小组捕获的东西(字符串"google"或"yahoo")做一些有用的事情,你也要注意使用非捕获组:www\.(?:google|yahoo)\.com.当正则表达式引擎不需要"记住"子字符串"google"或"yahoo"时,您的应用程序/脚本将运行得更快.当然,相对较小的字符串不会有太大的区别,但是当你的正则表达式和字符串变大时,它可能会变大.
有关使用非捕获组的更好示例,请参阅下面的Chris Lutz的评论.
| 归档时间: |
|
| 查看次数: |
792 次 |
| 最近记录: |