Escaping regex string

后端 未结 4 1849
时光说笑
时光说笑 2020-11-22 00:36

I want to use input from a user as a regex pattern for a search over some text. It works, but how I can handle cases where user puts characters that have meaning in regex?<

相关标签:
4条回答
  • 2020-11-22 00:59

    Unfortunately, re.escape() is not suited for the replacement string:

    >>> re.sub('a', re.escape('_'), 'aa')
    '\\_\\_'
    

    A solution is to put the replacement in a lambda:

    >>> re.sub('a', lambda _: '_', 'aa')
    '__'
    

    because the return value of the lambda is treated by re.sub() as a literal string.

    0 讨论(0)
  • 2020-11-22 01:08

    Use the re.escape() function for this:

    4.2.3 re Module Contents

    escape(string)

    Return string with all non-alphanumerics backslashed; this is useful if you want to match an arbitrary literal string that may have regular expression metacharacters in it.

    A simplistic example, search any occurence of the provided string optionally followed by 's', and return the match object.

    def simplistic_plural(word, text):
        word_or_plural = re.escape(word) + 's?'
        return re.match(word_or_plural, text)
    
    0 讨论(0)
  • 2020-11-22 01:13

    You can use re.escape():

    re.escape(string) Return string with all non-alphanumerics backslashed; this is useful if you want to match an arbitrary literal string that may have regular expression metacharacters in it.

    >>> import re
    >>> re.escape('^a.*$')
    '\\^a\\.\\*\\$'
    

    If you are using a Python version < 3.7, this will escape non-alphanumerics that are not part of regular expression syntax as well.

    If you are using a Python version < 3.7 but >= 3.3, this will escape non-alphanumerics that are not part of regular expression syntax, except for specifically underscore (_).

    0 讨论(0)
  • 2020-11-22 01:15

    Please give a try:

    \Q and \E as anchors

    Put an Or condition to match either a full word or regex.

    Ref Link : How to match a whole word that includes special characters in regex

    0 讨论(0)
提交回复
热议问题