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)