在Python正则表达式matchobj中,如何进行子串匹配,并将匹配分配给变量?

时间:2011-06-21 01:42:55

标签: python regex

鉴于此re.sub和'替换'功能 - 谢谢,Ignacio,指针! - 我能用字符串' * NONSENSE * '替换我的长文本blob中的所有匹配项 - 到目前为止,非常好!

一路上,我想在matchobj中找到 子串 ,称之为' findkey ',所以我可以做额外的工作......

怎么做?

data = re.sub('(:::[A-Z,a-z,:]+:::)', replace, data)

def replace(matchobj):
 if matchobj.group(0) != '':

  # this seems to work:
  tag = matchobj.group(1)

  # but this doesn't:
  findkey = re.search(':::([A-Z,a-z]+):::', tag)

  return '********************  NONSENSE  ********************'

 else:
  return ''

2 个答案:

答案 0 :(得分:0)

您在寻找

吗?
findkey = re.search(':::([A-Z,a-z]+):::', tag).group()

注意组()和this document可以提供帮助。

答案 1 :(得分:0)

试试这个。您可以将内部部分作为初始子调用的一部分进行匹配。

import re

data = ":::::::::::BLAH:::::::::, ::::::::MORE:::::::"

def replace(matchobj):
  # this seems to work:
  tag = matchobj.group(0)
  findkey = matchobj.group(1)

  print findkey

  return '********************  NONSENSE  ********************'


data = re.sub(r':::(?P<inner>[A-Z,a-z]+):::', replace, data)

print data

返回以下内容

BLAH
MORE
::::::::********************  NONSENSE  ********************::::::, :::::********************  NONSENSE  ********************::::