在 Perl 中匹配正则表达式时,会设置三个名为和的变量$PREMATCH
$MATCH
$POSTMATCH
,其中包含输入字符串匹配前的部分、匹配项本身和匹配后的部分。
如何使用 Python 正则表达式访问相同的值?
不,Python 没有明确支持 prematch 和 postmatch 值,但您可以使用匹配对象的属性对输入字符串进行切片;给定一个 matchobject 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']
如果您愿意,可以使用元组解包将其放入变量中:
>>> pre, match, post = re.split(r'(\d+)', 'Pre 1234 Post')
>>> pre, post
('Pre ', ' Post')
>>> match
'1234'
请注意,除非您将其限制为与参数.split()
匹配的 1 个,否则它将继续拆分: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']
不,您re
在 python 中使用该模块。然而,语法与 Perl 中的有些不同,没有 Perl 中的快捷方式。
根据您要实现的目标,您可以例如使用组。
>>> import re
>>> str = 'abcdefghijklmnopqrstuv'
>>> match = re.search('(.*)ij(.*)', str)
>>> match.groups()
('abcdefgh', 'klmnopqrstuv')
>>>