python正则表达式忽略几个字符

时间:2015-08-24 12:41:59

标签: python regex

在python3中,我需要以555=AB:C$: EF 1234567890的格式从序列中提取一个10位数字,我该怎么做? =和10位数字符串之间的字符串几乎可以是任何字符,而这些字符的长度始终为10 ...我尝试使用re.compile(),但无法设置适当的模式呢。欢迎任何建议!

编辑#1:字符串总共有20个字符,最后10位数字,前10个字符可以是任何字符(空格,字母,$或其他符号和数字)。因此,我还无法确定一个好的模式。

编辑#2:问题是我无法确定字符串末尾的字符(字符串是大文件的一部分)。此字符串后面的字符似乎在windows / linux / unix中没有统一显示。因此,我试图从一开始就找到它,而不是从头到尾。谢谢!

1 个答案:

答案 0 :(得分:1)

如果这10个数字始终字符串中的最后10个字符,您可以按照其他答案中的建议选择s[-10:]

如果无法保证,只需使用regular expression搜索10位数字,然后忽略字符串的其余部分。其格式为\d{10},即数字为\d,数字为{10}十倍。

>>> import re
>>> s = "555=AB:C$: EF 1234567890"
>>> re.search(r"\d{10}", s).group()
'1234567890'

根据你的陈述:

  

=和10位数字符串之间的字符串几乎可以是任何字符,而这些字符的长度总是10

如果你需要在更大的文本中找到这些数字,你可以搜索=,然后搜索10个字符,然后是10个数字,即=.{10}\d{10}

text = "foo bar not a block 1234567890 blub stuff 555=AB:C$: EF 1234567890 more unrelated stuff and another block 555=AB:C$: EF 1234567890 and finally more stuff"
p = re.compile(r"=.{10}(\d{10})")
for x in re.finditer(p, text):
    print x.group(1)

输出是后两组1234567890