我正在 Windows 7 上的 Python 2.7.3 中执行一些正则表达式练习。其中一些练习让我在同一行上寻找类似的模式。例如,我想使用正则表达式来捕获name1和name2...
<XML tag><more tags>[name1]</XML tag><XML2 tag>[name2]<XML2 tag></more tags>
如果我使用任何字符串解析来捕获 name2 ,会不会是“作弊”或“遗漏要点”?我觉得仅以正确的方式使用正则表达式应该能够捕获这两个名称,但字符串解析是我一直熟悉的。
打个比方,就像某人在 C++ 中研究递归,但使用 While 循环。递归不应该有任何 While 循环(尽管它当然可能是其他一些宏伟设计的一部分)。
最佳答案
好问题!许多初学者相信他们应该能够通过一次正则表达式匹配完成所有事情。毕竟,人们总是说正则表达式有多么强大,而你想做的事情却是如此简单......
但是不,正则表达式负责查找下一个匹配项,仅此而已。检索它匹配的子字符串,或查找多个匹配项,或执行替换,这些都是匹配正则表达式的行为的外部内容。这就是为什么语言提供了像 Python 的 findall()
和 sub()
这样的方法;执行您正在谈论的那种“字符串解析”操作,因此您不必这样做。
不久前我突然想到,掌握正则表达式的过程就是学习所有你不能用它们做的事情,为什么不呢。了解正则表达式匹配操作的哪些部分由正则表达式引擎执行,哪些部分由封闭语言或工具负责,是一个好的开始。
关于regex - 在学习正则表达式时混合字符串解析可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24499771/