使用正则表达式查找数字组,只替换为该组的最后一个成员

2024-09-26 18:13:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个csv文件,格式如下(仅显示相关行):

Global equity - 45%/45.1%
Private Investments - 25%/21%
Hedge Funds - 17.5%/18.1%
Bonds & cash - 12.5%/15.3%

我编写了一个正则表达式来查找每一个出现的数字(即45%/45.1%等),我试图编写它,使它只保留斜杠后面的数字。以下是我写的:

with open('sheet.csv','rU') as f:
    rdr = csv.DictReader(f,delimiter=',')
    row1 = next(rdr)
    assets = str(row1['Asset Allocation '])
    finnum = re.sub(r'(\/[0-9]+.)','#This is where I want to replace with just the numbers after the slash',assets)
    print(finnum)

所需输出:

Global equity - 45.1%
Private Investments - 21%
etc...

如果我不知道我想要的数字的索引,这可能吗?你知道吗


Tags: 文件csvthe格式with数字privateglobal
3条回答

您可以尝试使用此('\d+%/')regexp删除无用的数据。你知道吗

import re

string = 'Global equity - 45%/45.1%'
re.sub(r'\d+%/', '', string) # 'Global equity - 45.1%'

您还可以将第一个数字之前和/之后的内容分组:

import re

s = 'Hedge Funds - 17.5%/18.1%'
print re.sub('(.*-) .*/(.*)', '\g<1> \g<2>', s)

输出:

Hedge Funds - 18.1%

如果专门寻找该模式,可以使用基于组的replace和concat:

replace = lambda s: s.group(1) + ' ' + s.group(3)
re.sub(r'(.*) (\d+%/)(\d+%)', replace, 'Hedge Funds - 17.5%/18.1%')

然后是简单的去除不需要的:

val = 'Hedge Funds - 17.5%/18.1%'
re.sub(r'\d+%/', '', val)

或者,如果不想使用regex:

val = 'Hedge Funds - 17.5%/18.1%'
replaced = val[0:val.find(' - ')] + ' - ' + val[val.find('%/') + 2:]

相关问题 更多 >

    热门问题