从字符串末尾删除标点符号项

2024-09-30 12:29:20 发布

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

我有一个看似简单的问题,却似乎无法解决。给定一个包含DOI的字符串,如果最后一个字符是标点符号,我需要删除它,直到最后一个字符是字母或数字。在

例如,如果字符串是:

sampleDoi = "10.1097/JHM-D-18-00044.',"

我想要以下输出:

^{pr2}$

即删除.',

为此,我写了以下脚本:

invalidChars = set(string.punctuation.replace("_", ""))
a = "10.1097/JHM-D-18-00044.',"
i = -1
for each in reversed(a):
    if any(char in invalidChars for char in each):
        a = a[:i]
        i = i - 1
    else:
        print (a)
        break

然而,这会产生10.1097/JHM-D-18-00,但我希望它能产生10.1097/JHM-D-18-00044。为什么44从末尾移除?在


Tags: 字符串in脚本for字母doi数字字符
3条回答

这是一种使用next^{}的生成表达式的方法,它使用enumerate/reversed。在

sampleDoi = "10.1097/JHM-D-18-00044.',"

idx = next((i for i, j in enumerate(reversed(sampleDoi)) if j.isalnum()), 0)

res = sampleDoi[:-idx]

print(res)
'10.1097/JHM-D-18-00044'

使用默认参数0,这样,如果没有找到字母数字字符,则返回一个空字符串。在

字符串函数rstrip()的设计目的是实现以下目的:

>>> sampleDoi = "10.1097/JHM-D-18-00044.',"
>>> sampleDoi.rstrip(",.'")
'10.1097/JHM-D-18-00044'

更正代码:

import string

invalidChars = set(string.punctuation.replace("_", ""))
a = "10.1097/JHM-D-18-00044.',"
i = -1
for each in reversed(a):
    if any(char in invalidChars for char in each):
        a = a[:i]
        i = i # Well Really this line can just be removed all together.
    else:
        print (a)
        break

这将给出您想要的输出,同时保持原始代码基本相同。在

相关问题 更多 >

    热门问题