所以我有以下字符串,我一直在试图找出如何以这样一种方式操作它们,我得到一个特定的格式。
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次或多次的破折号以外的任何字符([^-]
),后面跟着字符串的末尾($
)。