Determining the unmatched portion of a string using a regex in Python

前端 未结 4 1467
梦谈多话
梦谈多话 2021-01-12 12:50

Suppose I have a string \"a foobar\" and I use \"^a\\s*\" to match \"a \".

Is there a way to easily get \"foobar\" returned? (What was NOT matched)

I want to

相关标签:
4条回答
  • 2021-01-12 13:37

    from http://docs.python.org/library/re.html#re.split

    >>> re.split('(\W+)', 'Words, words, words.')
    ['Words', ', ', 'words', ', ', 'words', '.', '']
    

    so your example would be

    >>> re.split(r'(^a\s*)', "a foobar")
    ['', 'a ', 'foobar']
    

    at which point you can separate the odd items (your match) from the even items (the rest).

    >>> l = re.split(r'(^a\s*)', "a foobar")
    >>> l[1::2] # matching strings
    ['a ']
    >>> l[::2] # non-matching strings
    ['', 'foobar']
    

    This has the advantage over re.sub in that you can tell, when, where, and how many matches were found.

    0 讨论(0)
  • 2021-01-12 13:39

    Use re.sub:

    import re
    s = "87 foo 87 bar"
    r = re.compile(r"87\s*")
    s = r.sub('', s)
    print s
    

    Result:

    foo bar
    
    0 讨论(0)
  • 2021-01-12 13:46
    >>> import re
    >>> re.sub("87\s*", "", "87 foo 87 bar")
    'foo bar'
    
    0 讨论(0)
  • 2021-01-12 13:46

    Instead of splitting or separating, maybe you can use re.sub and substitute a blank, empty string ("") whenever you find the pattern. For example...

    >>> import re
    >>> re.sub("^a\s*", "","a foobar")
    'foobar''
    >>> re.sub("a\s*", "","a foobar a foobar")
    'foobr foobr'
    >>> re.sub("87\s*", "","87 foo 87 bar")
    'foo bar'
    
    0 讨论(0)
提交回复
热议问题