从字符串中删除字符,直到达到特定格式



所以我有以下字符串,我一直在试图找出如何以这样一种方式操作它们,我得到一个特定的格式。

string1-itd_jan2021-internal
string2itd_mar2021-space
string3itd_feb2021-internal
string4-itd_mar2021-moon
string5itd_jun2021-internal
string6-itd_feb2021-apollo

我希望能够去掉最后一个字符串中的任何一个,所以我只剩下月份和年份,如下所示:

string1-itd_jan2021
string2itd_mar2021
string3itd_feb2021
string4-itd_mar2021
string5itd_jun2021
string6-itd_feb2021

我考虑过使用string。但后来意识到,对于一些弦,这是行不通的。我还想过通过将其放入列表和切片来摆脱一定数量的字符,但最终是不同的字符长度?

有什么我可以做它与regex或任何其他python模块?

使用str.rsplit和适当的maxsplit参数:

s = s.rsplit("-", 1)[0]

你也可以使用str.split(尽管这显然是更糟糕的选择):

s = "-".join(s.split("-")[:-1])

或者使用正则表达式:

s = re.sub(r'-[^-]*$', '', s)
# "-[^-]*" a "-" followed by any number of non-"-"

与一个正则表达式:

import re
re.sub(r'([0-9]{4}).*$', r'1', s)

像这样使用re.sub:

import re
lines = '''string1-itd_jan2021-internal
string2itd_mar2021-space
string3itd_feb2021-internal
string4-itd_mar2021-moon
string5itd_jun2021-internal
string6-itd_feb2021-apollo'''
for old in lines.split('n'):
new = re.sub(r'[-][^-]+$', '', old)
print('t'.join([old, new]))

打印:

string1-itd_jan2021-internal    string1-itd_jan2021
string2itd_mar2021-space        string2itd_mar2021
string3itd_feb2021-internal     string3itd_feb2021
string4-itd_mar2021-moon        string4-itd_mar2021
string5itd_jun2021-internal     string5itd_jun2021
string6-itd_feb2021-apollo      string6-itd_feb2021

解释:
r'[-][^-]+$':文字破折号(-),后面跟着重复1次或多次的破折号以外的任何字符([^-]),后面跟着字符串的末尾($)。

相关内容

  • 没有找到相关文章

最新更新