2017-07-18 2 views
0

Ich brauche ein bisschen Hilfe.Python3: Wie man Regex verwendet, um jedes Element in einer Liste zu validieren

Ich bin ziemlich neu in Python (ich benutze Version 3.0 gebündelt mit Anaconda) und ich möchte regex verwenden, um eine Liste von nur gültigen Zahlen zu validieren/zurückgeben, die ein Kriterium (sagen \ d {11} für 11 Ziffern). Ich erhalte die Liste Pandas mit

df = pd.DataFrame(columns=['phoneNumber','count'], data=[ 
    ['08034303939',11], 
    ['08034382919',11], 
    ['0802329292',10], 
    ['09039292921',11]]) 

Wenn ich alle Elemente zurückgeben

for row in df.iterrows(): # dataframe.iterrows() returns tuple 
    print(row[1][0]) 

mit es gibt alle Elemente ohne regex Validierung, aber wenn ich versuche, mit diesem

for row in df.iterrows(): # dataframe.iterrows() returns tuple 
    print(re.compile(r"\d{11}").search(row[1][0]).group()) 
zu validieren

es gibt einen Attributfehler zurück (da der zurückgegebene Wert für nicht übereinstimmende Werte None ist.

Wie kann ich das umgehen, oder gibt es einen einfacheren Weg?

Antwort

1

Wenn Sie überprüfen möchten, können Sie df.str.match verwenden und auf eine boolean Maske konvertieren df.astype(bool) mit:

In [1062]: x = df['phoneNumber'].str.match(r'\d{11}').astype(bool); x 
Out[1062]: 
0  True 
1  True 
2 False 
3  True 
Name: phoneNumber, dtype: bool 

Sie können boolean Indizierung verwenden, um nur die Zeilen mit gültigen Telefonnummern zurück.

In [1066]: df[x] 
Out[1066]: 
    phoneNumber count 
0 08034303939  11 
1 08034382919  11 
3 09039292921  11 
Verwandte Themen