Regex nested parenthesis in python

前端 未结 4 1958
灰色年华
灰色年华 2021-01-03 03:41

I have something like this:

Othername California (2000) (T) (S) (ok) {state (#2.1)}

Is there a regex code to obtain:

Other         


        
4条回答
  •  轻奢々
    轻奢々 (楼主)
    2021-01-03 04:12

    Regex

    (.+)\s+\(\d+\).+?(?:\(([^)]{2,})\)\s+(?={))?\{.+\(#(\d+\.\d+)\)\}
    

    Regular expression image

    Text used for test

    Name1 Name2 Name3 (2000) {Education (#3.2)}
    Name1 Name2 Name3 (2000) (ok) {edu (#1.1)}
    Name1 Name2 (2002) {edu (#1.1)}
    Name1 Name2 Name3 (2000) (V) {variation (#4.12)}
    Othername California (2000) (T) (S) (ok) {state (#2.1)}
    

    Test

    >>> regex = re.compile("(.+)\s+\(\d+\).+?(?:\(([^)]{2,})\)\s+(?={))?\{.+\(#(\d+\.\d+)\)\}")
    >>> r = regex.search(string)
    >>> r
    <_sre.SRE_Match object at 0x54e2105f36c16a48>
    >>> regex.match(string)
    <_sre.SRE_Match object at 0x54e2105f36c169e8>
    
    # Run findall
    >>> regex.findall(string)
    [
       (u'Name1 Name2 Name3'   , u''  , u'3.2'),
       (u'Name1 Name2 Name3'   , u'ok', u'1.1'),
       (u'Name1 Name2'         , u''  , u'1.1'),
       (u'Name1 Name2 Name3'   , u''  , u'4.12'),
       (u'Othername California', u'ok', u'2.1')
    ]
    

提交回复
热议问题