0

在 Perl 中匹配正则表达式时,设置三个名为和的变量$PREMATCH$MATCH$POSTMATCH,其中包含输入字符串匹配前的部分、匹配项本身和匹配后的部分。

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

4

2 回答 2

4

不,Python 没有明确支持 prematch 和 postmatch 值,但您可以使用匹配对象的属性对输入字符串进行切片;给定一个 matchobject 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']

如果您愿意,可以使用元组解包将其放入变量中:

>>> 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']
于 2012-08-25T20:36:53.390 回答
1

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

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

>>> import re
>>> str = 'abcdefghijklmnopqrstuv'
>>> match = re.search('(.*)ij(.*)', str)
>>> match.groups()
('abcdefgh', 'klmnopqrstuv')
>>>
于 2012-08-25T20:38:49.377 回答