从字符串末尾删除标点符号
Remove punctuation items from end of string
我有一个看似简单的问题,我似乎无法解决。给定一个包含 DOI 的字符串,如果它是标点符号,我需要删除最后一个字符,直到最后一个字符是字母或数字。
例如,如果字符串是:
sampleDoi = "10.1097/JHM-D-18-00044.',"
我想要以下输出:
"10.1097/JHM-D-18-00044"
即。移除 .',
我编写了以下脚本来执行此操作:
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
从最后删除?
这是使用 next
和 str.isalnum
以及利用 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
,以便在未找到字母数字字符时返回空字符串。
更正后的代码:
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
这将提供您想要的输出,同时保持原始代码基本相同。
如果您不想使用正则表达式:
the_str = "10.1097/JHM-D-18-00044.',"
while the_str[-1] in string.punctuation:
the_str = the_str[:-1]
删除最后一个字符,直到它不再是标点符号。
字符串函数 rstrip()
旨在完全 执行此操作:
>>> sampleDoi = "10.1097/JHM-D-18-00044.',"
>>> sampleDoi.rstrip(",.'")
'10.1097/JHM-D-18-00044'
我有一个看似简单的问题,我似乎无法解决。给定一个包含 DOI 的字符串,如果它是标点符号,我需要删除最后一个字符,直到最后一个字符是字母或数字。
例如,如果字符串是:
sampleDoi = "10.1097/JHM-D-18-00044.',"
我想要以下输出:
"10.1097/JHM-D-18-00044"
即。移除 .',
我编写了以下脚本来执行此操作:
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
从最后删除?
这是使用 next
和 str.isalnum
以及利用 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
,以便在未找到字母数字字符时返回空字符串。
更正后的代码:
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
这将提供您想要的输出,同时保持原始代码基本相同。
如果您不想使用正则表达式:
the_str = "10.1097/JHM-D-18-00044.',"
while the_str[-1] in string.punctuation:
the_str = the_str[:-1]
删除最后一个字符,直到它不再是标点符号。
字符串函数 rstrip()
旨在完全 执行此操作:
>>> sampleDoi = "10.1097/JHM-D-18-00044.',"
>>> sampleDoi.rstrip(",.'")
'10.1097/JHM-D-18-00044'