首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从字符串末尾删除标点符号项

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

Stack Overflow用户
提问于 2018-05-09 16:39:44
回答 4查看 1.7K关注 0票数 2

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

例如,如果字符串是:

代码语言:javascript
复制
sampleDoi = "10.1097/JHM-D-18-00044.',"

我希望得到以下输出:

代码语言:javascript
复制
"10.1097/JHM-D-18-00044"

即。删除.',

为此,我编写了以下脚本:

代码语言:javascript
复制
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从结尾被移除?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-05-09 16:44:37

修正代码:

代码语言:javascript
复制
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

这给出了您想要的输出,同时保持了原始代码的大部分相同。

票数 1
EN

Stack Overflow用户

发布于 2018-05-09 16:47:24

字符串函数rstrip()正是为此设计的:

代码语言:javascript
复制
>>> sampleDoi = "10.1097/JHM-D-18-00044.',"
>>> sampleDoi.rstrip(",.'")
'10.1097/JHM-D-18-00044'
票数 4
EN

Stack Overflow用户

发布于 2018-05-09 16:43:58

这是一种使用nextstr.isalnum并使用enumerate / reversed的生成器表达式的方法。

代码语言:javascript
复制
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,以便如果没有找到字母数字字符,则返回一个空字符串。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50258257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档