编译模式与python RE中的常规模式有何不同?

时间:2018-01-27 05:33:25

标签: regex python-3.x

我发现编译模式在某些情况下不起作用。 例如

<div class="row"><div class="boxed_content">Classification of Research<br>
                            {% for rdo in form.classif_res %}
                            <div class="form-check form-check-inline">
                                {{ rdo }}
                            </div>  
                            {% endfor %}
                            <input class="form-control" type="text" name="classif_other" id="res_classifcation" />

                    </div></div>

返回无

尽管

import re
s1 = 'one two three four'
s2 = 'five six seven eight'
p = re.compile(r'^five')
m = p.search(s1 + '\n' + s2, re.MULTILINE)

返回一个匹配。

编译模式时会发生什么变化?

1 个答案:

答案 0 :(得分:1)

只是你把旗子放在了错误的地方。如果要将标志与已编译的正则表达式一起使用,则在创建它时传递它们:

In [4]: import re
   ...: s1 = 'one two three four'
   ...: s2 = 'five six seven eight'
   ...: p = re.compile(r'^five', re.MULTILINE)
   ...: m = p.search(s1 + '\n' + s2)
   ...: print(m)
   ...:
<_sre.SRE_Match object; span=(19, 23), match='five'>

您未收到错误的原因是re.MULTILINEint的子类,已编译的正则表达式search方法正在将其解释为第二个位置参数,pos