2013-10-29 72 views
0

字符串我有一個列表:的Python如何打印包含數字

var = ["renderPass1", "renderPass2","renderPass3", "renderPassFilter", "renderPassSets"] 

我怎麼只打印renderPass1,renederPass2等,我的意思是,以後只打印包含多個成員「renderPass」

+0

你是說包含數字或字符串的字符串包含數字_after_'「renderPass」嗎?換句話說,這個數字的位置是否相關? – iCodez

+0

其實他們倆。所有答案都非常有用,而且彼此不同。正則表達式非常有用。 – iRex

回答

2

使用正則表達式來查找數字。

檢查python庫:Python: Re。你會想看看「\ d」。

一個工具,可以幫助我很多正則表達式是Txt to Regex。你只需放入你想要匹配的字符串並用GUI構建正則表達式。然後它爲您提供下面的代碼。

+1

提及正則表達式+1。在python中的一個例子會很有趣:-) – Nico

1

根據您對列表中的內容知道多少選擇一個。

打印頭3

print var[:3] 

印刷與圖案renderPass任何名稱後跟數字

print [name for name in var if name.startswith('renderPass') and name[9].isdigit()] 

打印以數字任何名稱的任意位置在它

print [name for name in var if any(ch.isdigit() for ch in name)] 
2
for value in var: 
    if value[-1].isdigit(): # check if last char is a number 
     print value 

現在如果y OU要測試的字符串「renderPass」

for value in var: 
     if 'renderPass' in value and value[-1].isdigit() 
      print value 
1
for name in var: 
    try: 
     float(name[len("renderPass"):]) 
     print name 
    except ValueError, er: 
     # does not have a number after renderPass -> do nothing 
     pass 
2

我給出兩個答案,因爲你的問題是沒有什麼被認爲是匹配的太清楚。

這是因爲如果該號碼的位置是相關:

>>> var = ["renderPass1", "renderPass2","renderPass3", "renderPassFilter", "renderPassSets"] 
>>> [x for x in var if any(c.isdigit() for c in x)] 
['renderPass1', 'renderPass2', 'renderPass3'] 
>>> 

這是因爲如果該號碼有"renderPass"後前來:

>>> from re import search 
>>> # I altered the values in here so I could demonstrate 
>>> var = ["renderPass1", "renderPass2","renderPass3", "1renderPassFilter", "1renderPassSets"] 
>>> [x for x in var if search("renderPass.*\d", x)] 
['renderPass1', 'renderPass2', 'renderPass3'] 
>>> 
2

假設你只需要與「SomeTextNumber」的模式,你可以這樣寫

[x for x in var if re.match("\w+\d$", x)] 
1
import re 
p = re.compile("[0-9]$") 
for s in var: 
    if p.search(s): print s 
相關問題