在python3中,我需要以555=AB:C$: EF 1234567890
的格式从序列中提取一个10位数字,我该怎么做? =
和10位数字符串之间的字符串几乎可以是任何字符,而这些字符的长度始终为10 ...我尝试使用re.compile()
,但无法设置适当的模式呢。欢迎任何建议!
编辑#1:字符串总共有20个字符,最后10位数字,前10个字符可以是任何字符(空格,字母,$或其他符号和数字)。因此,我还无法确定一个好的模式。
编辑#2:问题是我无法确定字符串末尾的字符(字符串是大文件的一部分)。此字符串后面的字符似乎在windows / linux / unix中没有统一显示。因此,我试图从一开始就找到它,而不是从头到尾。谢谢!答案 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
。