regex - 在学习正则表达式时混合字符串解析可以吗?

标签 regex

我正在 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/

相关文章:

Python:如何按原样强制字符串文字而不被解释为正则表达式模式

java - Java 中的正则表达式

javascript - 我想要 dd.d.dd.ddddd 或 dd.d.d.ddddd 类型的数据的正则表达式

javascript - 将 Javascript 正则表达式模式转换为 C++ std::regex 的规则?

c++ - 修改正则表达式以包含逗号

c# - 如何在删除子字符串后获取剩余字符串

php - 如何自定义 Zend_Form 正则表达式错误消息?

python - 当作为命令行参数提供给 python 脚本时,正则表达式被剥离 '\'

java - 替换java中的所有单词

python - 使用 setup.py 安装新的正则表达式模块