python - regEx 在 notepad++ 中有效,但在 python 中无效

标签 python regex

假设我们有这个:

.................
=== Operation 'abcd::ddca:dsd' ended in 1.234s   /1.234s (100.00%) execution time
................

使用 Notepad++ ,我可以通过以下方式识别它:

^\=* Operation '([\d\D]*)' ended in (\d*.\d*)s\s*/(\d*.\d*)s \([\d\D]*\) execution time

我希望将操作名称和执行时间分组。

在 python 中,试试这个:

exp=re.compile(r"^\=* Operation \'([\d\D]*)\' ended in (\d*.\d*)s\s*/(\d*.\d*)s \([\d\D]*\) execution time") 

什么都不提供。 我已经尝试过 \\( 来转义文字括号,但它没有用。我猜我不需要这样做,因为我在使用 r[exp]"时构建对象表达式。

关于如何获得与在 notepad++ 中相同的结果的任何想法?

LE:只尝试过:

exp=re.compile(r"^\=* Operation \'([\d\D]*)\'", flags=re.MULTILINE)

仍然没有找到任何东西。

LE2:

稍后在我使用的代码中 groups=exp.match(INPUT) 我用 groups.group(n)

得到了对

回答: 问题是匹配。使用 search 修复了问题

最佳答案

问题中提到的正则表达式对我来说没有任何变化。

>>> s = """
... .................
... === Operation 'abcd::ddca:dsd' ended in 1.234s   /1.234s (100.00%) execution time
... ................
... """
>>> import re
>>> exp = re.compile(r"^\=* Operation \'([\d\D]*)\' ended in (\d*.\d*)s\s*/(\d*.\d*)s \([\d\D]*\) execution time", flags=re.M)
>>> re.search(exp, s)
<_sre.SRE_Match object at 0x1038766b8>
>>> re.findall(exp, s)
[('abcd::ddca:dsd', '1.234', '1.234')]

不过要考虑两件事:

  1. 在标志参数中使用re.M
  2. 使用searchfindall 方法进行匹配。确保您没有使用 re.match,因为它只会匹配字符串的开头。

关于python - regEx 在 notepad++ 中有效,但在 python 中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21824220/

相关文章:

javascript - 有没有办法将这 3 个独立的正则表达式合二为一?

Javascript 测试方法不起作用(如预期的那样)

python - 如何由于 Django 中的不活动而使 session 过期?

python - 通过 selenium 进行浏览器性能测试

Python Spark 本地并行

regex - 如何grep包含两个逗号的行

javascript - 如何使用 .match javascript 方法来搜索数组和字符串?

python - 在 Pandas 数据框中将字符串 2.90K 转换为 2900 或将 5.2M 转换为 5200000

python - 我如何从 Python 调用 Vim?

regex - gsub() 中有超过 9 个反向引用