python - 如何使用 python 正则表达式在相同模式之间获取行

标签 python regex

我有一个字符串“s”如下

s="abc123abcfndfabc1234drfabc"

我想 grep 出现在“abc”之间的字符串。在这种情况下,输出应该是:

123, fndf, 1234drf

最佳答案

除非这是您必须使用正则表达式的作业,否则您应该使用 vikramls 的 split()基于 -based 的解决方案:它的速度是 Avinash Raj 基于正则表达式的解决方案的三倍多,这还不包括导入 re 的时间。模块。

以下是使用 Python 2.6.6 在 2GHz Pentium 4 上完成的一些计时。

$ timeit.py -n 100000 -s "import re;p=re.compile(r'(?<=abc).*?(?=abc)');s='abc123abcfndfabc1234drfabc'" "p.findall(s)"

100000 次循环,最好的 3 次:每次循环 6.32 usec

$ timeit.py -n 100000 -s "p='abc';s='abc123abcfndfabc1234drfabc'" "s.split(p)"

100000 次循环,最好的 3 次:每次循环 2.03 usec

上面的变体丢弃了列表的初始和最终成员,速度稍慢,但仍然比正则表达式快两倍。

$ timeit.py -n 100000 -s "p='abc';s='abc123abcfndfabc1234drfabc'" "s.split(p)[1:-1]"

100000 次循环,最好的 3 次:每次循环 2.49 usec

为了完整起见,这里是 vks 的正则表达式。 "'!'"东西是为了防止!从调用 bash 历史扩展。 (或者,您可以使用 set +o histexpand 关闭历史扩展并使用 set -o histexpand 将其重新打开)。

$ timeit.py -n 100000 -s "import re;p=re.compile(r'(?<=abc)((?:(?"'!'"abc).)+)abc');s='abc123abcfndfabc1234drfabc'" "p.findall(s)"

100000 次循环,最好的 3 次:每次循环 6.67 usec

关于python - 如何使用 python 正则表达式在相同模式之间获取行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27098591/

相关文章:

python - Pipeline 和 GridSearchCV,以及 XGBoost 和 RandomForest 的多类挑战

java - 为什么函数会在循环中被多次调用?

regex - 如何正确使用字符否定 [^ ] 来做单词非固定宽度向后回顾?

python - 向 mysql 插入 4 字节 unicode 引发的警告

python - 使用 Anaconda 克隆根环境

python - 将逗号分隔的键值对字符串转换为字典

python - 如何调用databricks Rest API来列出运行的作业

java - 非捕获组是否多余?

regex - 从 extjs 数字字段中排除点(.)

python - 向量到矩阵的余弦距离