【问题标题】:Split strings and capture groups in Python在 Python 中拆分字符串和捕获组
【发布时间】:2019-12-03 14:34:41
【问题描述】:

我有以下字符串:

'Cc1cc([N+](=O)[O-])ccc1OCC(C)(O)CN1CCN(Cc2ccccc2)CC1'

又想捕获[N+]和[O-],也就是拆分恢复。 我似乎无法通过使用 re.split 来恢复它们。

re.split(r'\[[^\]]*\]','Cc1cc([N+](=O)[O-])ccc1OCC(C)(O)CN1CCN(Cc2ccccc2)CC1')

output:
['Cc1cc(', '(=O)', ')ccc1OCC(C)(O)CN1CCN(Cc2ccccc2)CC1']

我正在寻找这样的东西:

['Cc1cc(', '[N+]','(=O)','[O-]', ')ccc1OCC(C)(O)CN1CCN(Cc2ccccc2)CC1']

我知道有如下修改: Splitting on regex without removing delimitersIn Python, how do I split a string and keep the separators?

【问题讨论】:

  • 您可以使用:re.findall(r'\[([^\]]*)\]','Cc1cc([N+](=O)[O-])ccc1OCC(C)(O)CN1CCN(Cc2ccccc2)CC1')
  • 使用捕获组\[([^\]]*)\]并匹配而不是拆分

标签: python regex string split tokenize


【解决方案1】:

如果你应用 re.split 函数用括号包裹你的函数,你会得到所需的输出:

s = 'Cc1cc([N+](=O)[O-])ccc1OCC(C)(O)CN1CCN(Cc2ccccc2)CC1'

re.split('(\[[^\]]*\])',s)

output : 
['Cc1cc(', '[N+]', '(=O)', '[O-]', ')ccc1OCC(C)(O)CN1CCN(Cc2ccccc2)CC1']

【讨论】:

  • 我明白了:['Cc1cc(', '[N+]', '(=O)', '[O-]', ')ccc1OCC(C)(O)CN1CCN(Cc2ccccc2 )CC1']
  • 您可以添加一两行解释,并显示实际结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-19
  • 1970-01-01
  • 2021-01-24
  • 2010-09-19
  • 1970-01-01
  • 2011-05-31
相关资源
最近更新 更多