匹配Perl中的正则表达式three variables named $PREMATCH
, $MATCH
and $POSTMATCH
are set,包含匹配前输入字符串的部分,匹配本身以及之后的部分。
如何使用Python正则表达式访问相同的值?
答案 0 :(得分:3)
不,Python没有明确支持prematch和postmatch值,但你可以使用match object的属性来切片输入字符串;给定一个匹配对象match
,等价物是:
$PREMATCH
:match.string[:match.start()]
$MATCH
:match.group()
$POSTMATCH
:match.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')
>>>