Python regex words boundary with unexpected results

元气小坏坏 提交于 2019-12-02 04:52:32

Note that to match ON ANY you need to add an escaped (since you are using re.VERBOSE flag) space between ON and ANY as \b word boundary being a zero-width assertion does not consume any text, just asserts a position between specific characters. That is the reason for your first re.compile(r''' \bON\bANY\b''', re.VERBOSE) approach failure.

Use

rx = re.compile(r''' \bON\ ANY\b ''', re.VERBOSE|re.IGNORECASE)

See the Python demo

The re.compile(r'''\b(ON)?\b(Any)?''', re.VERBOSE) returns tuples since you defined (...) capturing groups in the pattern.

The re.compile(r'''\b(?:ON)?\b(?:Any)?''', re.VERBOSE) matches optional sequences, either ON or Any, so you get those words as values. You get empty values as well because this regex can match just a word boundary (all other subpatterns are optional).

More details about word boundaries:

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!