2012-07-05 42 views
27

Giả sử tôi đã có một chuỗiCách lấy các giá trị số nguyên từ một chuỗi trong Python?

string1 = "498results should get" 

Bây giờ tôi cần phải nhận chỉ có giá trị số nguyên từ các chuỗi như 498. Ở đây tôi không muốn sử dụng list slicing vì các giá trị số nguyên có thể làm tăng như thế này ví dụ:

string2 = "49867results should get" 
string3 = "497543results should get" 

Vì vậy, tôi muốn có được giá trị chỉ số nguyên ra khỏi chuỗi chính xác theo thứ tự. Ý tôi là tương ứng với số 498,49867,497543 từ string1,string2,string3.

Có ai cho tôi biết cách thực hiện điều này trong một hoặc hai dòng không?

+0

@ Bill the Lizard: Cảm ơn bạn chỉnh sửa –

Trả lời

61
>>> import re 
>>> string1 = "498results should get" 
>>> int(re.search(r'\d+', string1).group()) 
498 

Nếu có nhiều số nguyên trong chuỗi:

>>> map(int, re.findall(r'\d+', string1)) 
[498] 
+1

Cảm ơn bạn rất nhiều kẻ rất hữu ích .... –

+3

điều này là không chính xác chính xác, có nó sẽ làm cho chuỗi ** bắt đầu ** với một số nguyên, nhưng nếu số nguyên là ở giữa của chuỗi, nó thắng ' t làm. Có lẽ tốt hơn nên sử dụng 'int (re.search (r '\ d +', string1) .group())' – eLRuLL

+1

Nếu 'string1' là ** (020) 3493 **, nó không thành công. – Hussain

7

phiên bản Iterator

>>> import re 
>>> string1 = "498results should get" 
>>> [int(x.group()) for x in re.finditer(r'\d+', string1)] 
[498] 
7
>>> import itertools 
>>> int(''.join(itertools.takewhile(lambda s: s.isdigit(), string1))) 
+1

Điều này sẽ chỉ hoạt động nếu số ở đầu chuỗi. Ngoài ra, tại sao không sử dụng 'str.isdigit' thay vì lambda? –

+2

Điều này cũng có thể được viết dưới dạng 'int (''. Join (itertools.takewhile (str.isdigit, string1)))'. Tôi sẽ không bao giờ thực sự sử dụng một trong hai phương pháp kể từ khi điều này là overcomplicating nó. – jamylak

+0

https://groups.google.com/forum/?hl=vi&fromgroups#!msg/alt.religion.emacs/DR057Srw5-c/Co-2L2BKn7UJ –

7

nếu bạn có nhiều bộ số thì đây là một lựa chọn

>>> import re 
>>> print(re.findall('\d+', 'xyz123abc456def789')) 
['123', '456', '789'] 

của nó không tốt cho nổi chuỗi số điểm mặc dù.

5

Dưới đây là một lót của bạn, mà không sử dụng bất kỳ biểu thức thông thường, mà có thể tốn kém vào những thời điểm:

>>> ''.join(filter(str.isdigit, "1234GAgade5312djdl0")) 

lợi nhuận:

'123453120' 
0
def function(string): 
    final = '' 
    for i in string: 
     try: 
      final += str(int(i)) 
     except ValueError: 
      return int(final) 
print(function("4983results should get")) 
Các vấn đề liên quan