我有一个格式为 "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() 返回修改后的,它不会就地修改它。
