2012-05-23 37 views
1

比方說,我有一個字符串,我想檢查這個字符串的很多條件。例如:檢查字符串的條件

  1. 這是大小的X
  2. 沒有空格
  3. 最後一個字母是一個數字字符

所有條件1-3 這是可以做到在一個函數中的常規標準方式(如果這和那個')

但是...我會怎麼做在一個良好的Python風格的方式嗎?

+3

當然,還有其他的方式來這樣做,但我認爲任何事情都不會像「如果這件事等等」那樣清楚。 – mgilson

+0

只需使用正則表達式'\ S {x-1} \ d $',(用實際數字替換x-1) – NullUserException

+0

現在您有2個問題。 – mayhewr

回答

5

它可能比它的價值更復雜,但您可以使用正則表達式檢查所有這些條件。

例如,如果你想要的大小爲8個字符,你可以使用下面的檢查所有三個條件:

if re.match(r'\S{7}\d$', text): 
    print 'all conditions match' 
1

試着這麼做

import re 
def test(s): 
    return len(s)>=x and re.match("^\S*\d$", s) 

這將測試是否串長度至少爲x,它是一系列非空格字符,最後是數字字符。

4

一種方法是使用正則表達式(假設爲10 x):

if re.match(r"\S{10}(?<=\d)$", mystring): 
    # Success! 
+0

在一個長度關閉。 –

+0

@PaulBekingham:不,它不是。你知道周圍的斷言嗎? –

+0

10 +數字,所以你的例子是11,而不是10. –

7

您可以使用一個簡單的if條件與any

s='fdsfgsgsfds9' 
if len(s)==7 and not any(c.isspace() for c in s) and s[-1].isdigit(): 
    pass 
+0

對於非正則表達式解決方案對所有用戶來說更具可讀性,特別是那些不是正則表達式的用戶。 – hexparrot

+0

我會把它寫成'if len(s)== 7,而不是任何(c中的c.isspace())和s [-1] .isdigit()':我認爲它更容易閱讀。 – DSM

+0

@DSM感謝教我關於'any()',編輯的解決方案。 :) –