簡體   English   中英

Python-提取重要的字符串信息

[英]Python - Extract important string information

我有以下字符串

http://example.com/variable/controller/id32434242423423234?param1=321&param2=4324342

在這種情況下,如何以最佳方式提取id值-32434242423423234

弗拉爾茲(Mardjo)

您可以只使用正則表達式 ,例如:

import re

s = "http://example.com/variable/controller/id32434242423423234?param1=321&param2=4324342"

m = re.search(r'controller/id(\d+)\?',s)
if m:    
    print "Found the id:", m.group(1)

如果需要將值作為數字而不是字符串,則可以使用int(m.group(1)) 還有很多其他方法可能更合適,這取決於代碼的更大目標,但是如果沒有更多上下文,這很難說。

>>> import urlparse
>>> res=urlparse.urlparse("http://example.com/variable/controller/id32434242423423234?param1=321&param2=4324342")
>>> res.path
'/variable/controller/id32434242423423234'
>>> import posixpath
>>> posixpath.split(res.path)
('/variable/controller', 'id32434242423423234')
>>> directory,filename=posixpath.split(res.path)
>>> filename[2:]
'32434242423423234'

在這種情況下,使用urlparseposixpath可能太多了,但是我認為這是干凈的方法。

>>> s
'http://example.com/variable/controller/id32434242423423234?param1=321&param2=4324342'
>>> s.split("id")
['http://example.com/variable/controller/', '32434242423423234?param1=321&param2=4324342']
>>> s.split("id")[-1].split("?")[0]
'32434242423423234'
>>>

盡管Regex是必經之路,但為簡單起見,我編寫了一個字符串解析器 在某種程度上,是PEP 3101進行的字符串格式化操作的(不完整)反向操作。 這非常方便,因為這意味着您不必學習另一種指定字符串的方法。

例如:

>>> 'The answer is {:d}'.format(42)
The answer is 42

解析器執行相反的操作:

>>> Parser('The answer is {:d}')('The answer is 42') 
42

對於您的情況,如果您想要一個int作為輸出

>>> url = 'http://example.com/variable/controller/id32434242423423234?param1=321&param2=4324342'
>>> fmt = 'http://example.com/variable/controller/id{:d}?param1=321&param2=4324342'
>>> Parser(fmt)(url)
32434242423423234

如果您想要一個字符串:

>>> fmt = 'http://example.com/variable/controller/id{:s}?param1=321&param2=4324342'
>>> Parser(fmt)(url)
32434242423423234

如果要在字典中捕獲更多內容:

>>> fmt = 'http://example.com/variable/controller/id{id:s}?param1={param1:s}&param2={param2:s}'
>>> Parser(fmt)(url)
{'id': '32434242423423234', 'param1': '321', 'param2': '4324342'}

或在元組中:

如果要在字典中捕獲更多內容:

>>> fmt = 'http://example.com/variable/controller/id{:s}?param1={:s}&param2={:s}'
>>> Parser(fmt)(url)
('32434242423423234', '321', '4324342')

試試看,它托管在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM