[issue38582] re: backreference number in replace string can't >= 100

veaba report at bugs.python.org
Fri Oct 25 03:24:01 EDT 2019


veaba <908662421 at qq.com> added the comment:

Yes, this is not a good place to use regular expressions.

Using regular expressions:
def actual_re_demo():
    import re
    # This is an indefinite string...
    text = "tf.where(condition, x=None, y=None, name=None) tf.batch_gather ..."

    # Converting fields that need to be matched into regular expressions is also an indefinite string
    pattern_str = re.compile('(tf\\.batch_gather)|(None)|(a1)')

    #I don't know how many, so it's over \ \ 100 \ \ n
    x = re.sub(pattern_str, '`'+'\\1\\2'+'`', text)

    print(x)

    # hope if:tf.Prefix needs to match,The result will be:`tf.xx`,

    # But in fact, it's not just TF. As a prefix, it's a random character, it can be a suffix, it can be other characters.

    #  If more than 100, the result is=>:989¡¢£¤¥¦§89¨©ª«¬­®¯89°±²³´µ¶·89¸¹º»¼½¾¿890123`, name=`None at ABCDEFG89HIJKLMNO89PQRSTUVW89XYZ[\]^_89`abcdefg89hijklmno89pqrstuvw89xyz{|}~8901234567890123456789

    # I noticed in the comment area that it was caused by a confusion of Radix, which seems to be embarrassing.


Use replace to solve it. It looks much better.
def no_need_re():
    text = "tf.where(condition, x=None, y=None, name=None) tf.batch_gather ..."
    pattern_list = ['tf.batch_gather', 'None']
    for item in pattern_list:
        text=text.replace(item, '`'+item+'`')

    print(text)

no_need_re()

Expect to report an error directly if it exceeds the limit, instead of overflowing the character, like this:

989¡¢£¤¥¦§89¨©ª«¬­®¯89°±²³´µ¶·89¸¹º»¼½¾¿890123`, name=`None at ABCDEFG89HIJKLMNO89PQRSTUVW89XYZ[\]^_89`abcdefg89hijklmno89pqrstuvw89xyz{|}~8901234567890123456789

----------

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue38582>
_______________________________________


More information about the Python-bugs-list mailing list