Skip to main content
 首页 » 编程设计

python之破折号后更改字符串结尾

2025年05月04日20tuyile006

我有一个格式为 "12345-0012-0123" 的 string,我想将它们全部更改为 12345- 的格式0012-123" 以便破折号后的最后一部分只有三位数而不是四位数。

在所有情况下,破折号后的最后一部分最多只有三个实数,我需要在前面保留一个零 0001、0012、0123...

我要编辑的一些字符串已经是正确的格式,所以快速检查一下我是否需要执行更正会更好......

编辑:已解决...!!

对于任何感兴趣的人,这是我正在使用的 arc gis 计算器代码,它是根据 anirudh 提供的答案修改的...

#转换为三位数 def FixCount(s): length = len(s[s.rfind('-')+1:]) 如果长度 > 3: 返回 s.rstrip(s[s.rfind('-')+1:])+s[s.rfind('-')+2:] 别的: 返回 s.rstrip(s[s.rfind('-')+1:])+s[s.rfind('-')+1:] __esri_field_calculator_splitter__ FixCount(str(!input_field_id!))

请您参考如下方法:

这是 regular expressions 的工作!

给定:

>>> s 
'12345-0012-0123' 

我们要匹配两个三个组:

  • 一个或多个 (+) 数字 (d) 后跟一个 - 后跟一个或多个 (+) 数字 (d) 后跟 -
  • 然后有一个或多个 (+) 0,我们不捕获它(没有 ())。如果您只想匹配单个 0,请删除 +!
  • 一个或多个 (+) 位数字 (d)

然后我们想要替换 ( re.sub() ) 我们的字符串 s ,它匹配这个正则表达式与那些 capture groups 中的内容.

>>> re.sub('(\d+-\d+-)0+(\d+)', r'\1\2', s) 
'12345-0012-123' 

注意:

re.sub() 返回修改后的,它不会就地修改它。