在Python正则匹配对象中,如何进行子串匹配并将结果赋值给变量?

1 投票
2 回答
606 浏览
提问于 2025-04-16 19:57

根据这个 re.sub 和 'replace' 函数 - 感谢 Ignacio 的提示! - 我可以把我那段很长的文本中的所有匹配项替换成字符串 '* NONSENSE *',到目前为止,一切都很好!

在这个过程中,我想在匹配对象中找到一个 子字符串,我称它为 '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

你在找什么呢?

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

注意一下 group() 这个东西,还有 这个文档 也能帮到你。

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  ********************::::

撰写回答