2011-06-17 12 views
8
random string 
this is 34 the string 3 that, i need 234 
random string 
random string 
random string 
random string 

random string 
this is 1 the string 34 that, i need 22 
random string 
random string 
random string 
random string 

random string 
this is 35 the string 55 that, i need 12 
random string 
random string 
random string 
random string 

Trong một chuỗi có nhiều dòng. Một trong các dòng được lặp lại nhưng với các số khác nhau mỗi lần. Tôi đã tự hỏi làm thế nào tôi có thể lưu trữ các con số trong những dòng. Các con số sẽ luôn ở cùng vị trí trong dòng, nhưng có thể là bất kỳ số chữ số nào.Làm thế nào để lấy số ở giữa một chuỗi? (Python)

Chỉnh sửa: Chuỗi ngẫu nhiên cũng có thể có số trong chúng.

+1

sử dụng cụm từ thông dụng. pydoc re –

Trả lời

7

Sử dụng biểu thức thông thường:

>>> import re 
>>> comp_re = re.compile('this is (\d+) the string (\d+) that, i need (\d+)') 
>>> s = """random string 
this is 34 the string 3 that, i need 234 
random string 
random string 
random string 
random string 

random string 
this is 1 the string 34 that, i need 22 
random string 
random string 
random string 
random string 

random string 
this is 35 the string 55 that, i need 12 
random string 
random string 
random string 
random string 
""" 
>>> comp_re.findall(s) 
[('34', '3', '234'), ('1', '34', '22'), ('35', '55', '12')] 
+0

Xin lỗi tôi đã đề cập đến điều này, nhưng các chuỗi ngẫu nhiên khác cũng có thể có số trong chúng. – Takkun

+0

@Takkun làm thế nào để yo biết những gì là thú vị cho bạn? – OscarRyz

+0

văn bản yêu thích là một trong số ** như thế này là 35 chuỗi 55, tôi cần 12 ** - vì vậy tôi nghĩ rằng regex của tôi là mong muốn –

4

Bằng cách sử dụng biểu thức thông thường

import re 
s = """random string 
this is 34 the string 3 that, i need 234 
random string 
random string 
random string 
""" 
re.findall('this is (\d+) the string (\d+) that, i need (\d+)', s)  
4

Giả sử s được chuỗi toàn bộ multiline, bạn có thể sử dụng mã như

my_list = [] 
for line in s.splitlines(): 
    ints = filter(str.isdigit, line.split()) 
    if ints: 
      my_list.append(map(int, ints)) 

chí này cung cấp cho bạn danh sách các danh sách , một danh sách các số nguyên cho mỗi dòng có chứa số nguyên. Nếu bạn muốn có một danh sách tất cả các số, hãy sử dụng

my_list = [int(i) for line in s.splitlines() 
      for i in filter(str.isdigit, line.split())] 
+1

+1 không trực tiếp sử dụng regex –

Các vấn đề liên quan