2012-07-05 50 views
1

我有下面的示例字符串,我想删除只有一组零。正则表达式来删除第一组零件

的例子字符串是

AAL000007200100000787777388300000

我想删除只有第一套零年代,剩下的完好。我想

AAL7200100000787777388300000

结束了,我曾尝试以下,但它始终是太贪婪,并采取第二套零的!

#!/usr/bin/env python3 
import re 

suffixdrop = re.split("\B0+\B", "AAL000007200100000787777388300000", re.I) 
if suffixdrop: #found a suffix here 
     print(suffixdrop) 

打印的结果是

[ 'AAL', '72', '100000787777388300000']

+0

这是一个非常小的事情,但在'打印有在“suffixdrop”中间不必要的空间(后缀删除)'。 – Claudio 2012-07-05 18:46:50

回答

4

\B字边界的相反,后者不匹配听起来像你想在这里。

如果你想有一个非数字字符后删除第一组连续0的,试试这个:

In [7]: print x 
AAL000007200100000787777388300000 

In [8]: print re.sub("^(\D+)0+", r"\1", x) 
AAL7200100000787777388300000 

re.sub("^(\D+)0+", r"\1", x)的意思是“匹配线后跟任意数量的非数字字符的开始,随后是任意数量的0个字符“,并将其替换为第一组非数字字符。

+0

感谢马特,以及非常全面的答案!这正是我所追求的! – 2012-07-05 18:28:25

+0

请注意,我编辑了有关使用lookbehind的内容,因为我原先发布的内容也会替换第二组重复0,如果它们也跟随非数字字符,例如,如果您有'AL000007B003'输出将会'AL7B3' – 2012-07-05 18:30:03

+0

是的,谢谢,看到你这样做,因为我这样做。虽然看到后面的外观很有用。我会在让我接受答案的时候! – 2012-07-05 18:31:18

0

我应该这样做:

re.sub(r'0+', '', "AAL000007200100000787777388300000", count=1) 
0

与空字符串替换正则表达式(?<=^\D*?)(0+)(?=.*$)的比赛