python regex [newbie]

时间:2018-05-20 16:47:33

标签: python regex

>>> my_words = 'ABC 123 456 www'
>>> my_words
'ABC 123 456 www'

>>> import re
>>> p = re.compile(r'\d{3}')
>>> p.findall(my_words)
['123', '456']

如果我想获得13和46,如何编写编译规则?

2 个答案:

答案 0 :(得分:0)

如果你想要的是扩展你的解决方案以使用任何长度的数字,那么你可以使用方法str.isdigit在没有regexp的情况下完成此操作,该方法检查字符串是否仅由数字组成。

my_words = 'ABC 123 456 www 13 46'
numbers = [word for word in my_words.split() if word.isdigit()]
numbers  # ['123', '456', '13', '46']

如果你想要的是从数字中删除中间数字,那么你可以使用捕获组re来完成。

my_words = 'ABC 123 456 www'
numbers = list(map(''.join, re.findall(r'(\d)\d(\d)', my_words)))
numbers # ['13', '46']

答案 1 :(得分:0)

坦率地说,我不会使用正则表达式。一个简单的列表理解应该可以解决问题,从那里你可以提取第一个和最后一个字符:

result = [w[0] + w[-1] for w in my_words.split() if len(w) == 3 and w.isdigit()]