Python在以数字结尾的列表中查找元素

Python在以数字结尾的列表中查找元素,python,regex,string,python-3.x,Python,Regex,String,Python 3.x,我有一个字符串列表,我想列出所有以\u 1234结尾的字符串,其中1234可以是任何4位数字。最理想的方法是找到所有的元素,以及数字实际上是什么,或者至少返回第一个匹配元素,以及4个数字是什么 例如,我有 ['A', 'BB_1024', 'CQ_2', 'x_0510', 'y_98765'] 我想去 ['1024', '0510'] 好的,到目前为止,我得到,\d{4}$将匹配\u 1234并返回一个匹配对象,匹配对象。组(0)是实际匹配的字符串。但是,有没有更好的方法来查找\d{4}$

我有一个字符串列表,我想列出所有以
\u 1234
结尾的字符串,其中
1234
可以是任何4位数字。最理想的方法是找到所有的元素,以及数字实际上是什么,或者至少返回第一个匹配元素,以及4个数字是什么

例如,我有

['A', 'BB_1024', 'CQ_2', 'x_0510', 'y_98765']
我想去

['1024', '0510']
好的,到目前为止,我得到,
\d{4}$
将匹配
\u 1234
并返回一个匹配对象,
匹配对象。组(0)
是实际匹配的字符串。但是,有没有更好的方法来查找
\d{4}$
而只返回
\d{4}
而不返回
\u

尝试以下方法:

[s[-4:] for s in lst if s[-4:].isdigit() and len(s) > 4]
检查最后四个字符是否为数字。 添加了
len(s)>4
,以纠正Joran指出的错误。

使用:

对于正则表达式,模式匹配一个下划线和字符串末尾的4位数字,只捕获数字(注意paren)。然后可通过
匹配访问捕获的组。组(1)
(请记住
组(0)
是整个匹配)。

请尝试以下代码:

r = re.compile(".*?([0-9]+)$")
newlist = filter(r.match, mylist)
print newlist

下次在这里提问时,请显示一些代码,即使它根本不起作用。它使人们更容易帮助你

如果您对没有任何正则表达式的解决方案感兴趣,下面是一种列表理解方法:

>>> data = ['A', 'BB_1024', 'CQ_2', 'x_0510', 'y_98765']
>>> endings = [text.split('_')[-1] for text in data]
>>> endings
['A', '1024', '2', '0510', '98765']
>>> [x for x in endings if x.isdigit() and len(x)==4]
['1024', '0510']

工作正常,\D表示不是数字,因此它将与“AB2421”、“D3和1345”等匹配。

您需要哪部分的帮助?你调查过了吗<代码>过滤器?您能展示一下您的尝试吗?这个问题目前很广泛。请看一下
split
len
isdigit
。。。还是
re
模块太宽?胡说,很具体。正则表达式可能非常混乱,捕获组更是如此。这完全是错误的。。。考虑<代码> s=[123′,'asday4221′,'yelLo1234′,'1′] < /代码>
>>> data = ['A', 'BB_1024', 'CQ_2', 'x_0510', 'y_98765']
>>> endings = [text.split('_')[-1] for text in data]
>>> endings
['A', '1024', '2', '0510', '98765']
>>> [x for x in endings if x.isdigit() and len(x)==4]
['1024', '0510']
import re

src = ['A', 'BB_1024', 'CQ_2', 'x_0510', 'y_98765', 'AB2421', 'D3&1345']

res = []
p = re.compile('.*\D(\d{4})$')
for s in src:
    m = p.match(s)
    if m:
        res.append(m.group(1))

print(res)