我在Windows 7上的Python 2.7.3中执行了一些正则表达式练习。其中一些练习让我在同一行上寻找类似的模式。例如,我想使用正则表达式来捕获name1和name2 ......
<XML tag><more tags>[name1]</XML tag><XML2 tag>[name2]<XML2 tag></more tags>
它会&#34;作弊&#34;或者&#34;错过了这一点&#34;如果我使用任何字符串解析来捕获name2?我觉得使用正则表达式只有正确的方法应该能够捕获这两个名称,但字符串解析是我一直熟悉的。
类比就像有人在C ++中学习递归,但使用While循环。递归不应该有任何While循环(当然它可能是其他一些宏设计的一部分)。
答案 0 :(得分:2)
好问题!许多初学者都相信他们应该能够通过一次正则表达式匹配来完成所有事情。毕竟,人们总是说正则表达式是多么强大,而你正在尝试做的事情是如此简单......
但不,正则表达式负责寻找下一场比赛,这就是全部。检索它匹配的子字符串,或找到多个匹配,或执行替换,这些都是匹配正则表达式的行为之外的。这就是为什么语言提供像Python findall()
和sub()
这样的方法的原因;做那种&#34;字符串解析&#34;你正在谈论的行动,所以你不必这样做。
有一段时间我发现掌握正则表达式的过程是学习你可以做的一切,为什么不做。了解正则表达式匹配操作的哪些部分由正则表达式引擎执行,以及哪些部分是封闭语言或工具的责任,这是一个良好的开端。