【问题标题】:Extract characters from string after last period在最后一个句点之后从字符串中提取字符
【发布时间】:2015-05-26 15:43:09
【问题描述】:

我有一个orderedDict

dict2.items():
[('A', <function __main__.percentile_50>),
 ('B', <function numpy.core.fromnumeric.sum>),
 ('C', <function numpy.core.fromnumeric.sum>),
 ('D', <function numpy.core.fromnumeric.mean>),
 etc...

我想创建一个列来说明所使用的描述性(percentile_50、sum、mean 等)。我正在考虑找到最后一个 .,然后抓取它后面的字符直到 &gt;。所以我最终会得到percentile_50, sum, sum, mean, etc.。有什么建议吗?

【问题讨论】:

  • 您真的尝试过这样做吗? rsplit 会变得非常简单。
  • @jonrsharpe 不,我不确定从哪里开始。我在想可能是某种splitregex。我会调查rsplit,谢谢领导!
  • 看起来您将函数对象存储在元组中而不是 str 中
  • 如果有人只使用sum,例如repr(sum) 给出'&lt;built-in function sum&gt;',该怎么办。或者有人以合格的方式导入了这些函数,使得名称不包含点字符,或者在运行时更改名称?
  • 我现在使用str(dict2.items()[2][1]).split('function ')[1].split(' at')。我认为这应该可行,除非有人认为这是一种糟糕的执行方式

标签: python regex pandas slice


【解决方案1】:

如果您的元组中有字符串,您可以在列表理解中使用split

>>> l=[('A', '<function __main__.percentile_50>'),
...  ('B', '<function numpy.core.fromnumeric.sum>'),
...  ('C', '<function numpy.core.fromnumeric.sum>'),
...  ('D', '<function numpy.core.fromnumeric.mean>')]
>>> 
>>> [(i,j.strip('>').split('.')[-1]) for i,j in l]
[('A', 'percentile_50'), ('B', 'sum'), ('C', 'sum'), ('D', 'mean')]

但是,如果您有函数对象,则可以使用 __name__ 属性为您的函数提取名称:

>>> [(i,j.__name__) for i,j in l]
[('A', 'percentile_50'), ('B', 'sum'), ('C', 'sum'), ('D', 'mean')]

【讨论】:

    【解决方案2】:

    使用正则表达式的解决方案之一:

    (?<=\.)([^.>]+)(?=>$)
    

    DEMO

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-14
      • 1970-01-01
      • 1970-01-01
      • 2019-05-13
      • 1970-01-01
      • 1970-01-01
      • 2020-03-12
      相关资源
      最近更新 更多