在Python正则表达式中访问prematch,match和postmatch

时间:2012-08-25 20:31:30

标签: python regex

匹配Perl中的正则表达式three variables named $PREMATCH, $MATCH and $POSTMATCH are set,包含匹配前输入字符串的部分,匹配本身以及之后的部分。

如何使用Python正则表达式访问相同的值?

2 个答案:

答案 0 :(得分:3)

不,Python没有明确支持prematch和postmatch值,但你可以使用match object的属性来切片输入字符串;给定一个匹配对象match,等价物是:

  • $PREMATCHmatch.string[:match.start()]
  • $MATCHmatch.group()
  • $POSTMATCHmatch.string[match.end():]

演示:

>>> import re
>>> match = re.search(r'\d+', 'Pre 1234 Post')
>>> match.string[:match.start()]
'Pre '
>>> match.group()
'1234'
>>> match.string[match.end():]
' Post'

您还可以使用re.split()来围绕正则表达式分配一个字符串,并在整个表达式周围使用一组:

>>> re.split(r'(\d+)', 'Pre 1234 Post')
['Pre ', '1234', ' Post']

如果您愿意,可以使用tuple-unpacking将其放入变量中:

>>> pre, match, post = re.split(r'(\d+)', 'Pre 1234 Post')
>>> pre, post
('Pre ', ' Post')
>>> match
'1234'

请注意.split()将继续拆分,除非您将其限制为与maxsplit参数匹配:

>>> re.split(r'(\d+)', 'One 1 Two 2 Three 3')
['One ', '1', ' Two ', '2', ' Three ', '3', '']
>>> re.split(r'(\d+)', 'One 1 Two 2 Three 3', 1)
['One ', '1', ' Two 2 Three 3']

答案 1 :(得分:1)

不,你在python中使用re模块。然而,语法与Perl略有不同,Perl中没有快捷方式。

根据您要实现的目标,您可以使用组。

>>> import re
>>> str = 'abcdefghijklmnopqrstuv'
>>> match = re.search('(.*)ij(.*)', str)
>>> match.groups()
('abcdefgh', 'klmnopqrstuv')
>>>