我需要從URL路徑中提取一些文本,但我對Regex知之甚少。使用re模塊在兩個'/'之間獲取數據
import re
url = '/s/GETTHISDATA/canBeIgnored/canBeIgnored'
myData = #needs to equal GETTHISDATA
我需要從URL路徑中提取一些文本,但我對Regex知之甚少。使用re模塊在兩個'/'之間獲取數據
import re
url = '/s/GETTHISDATA/canBeIgnored/canBeIgnored'
myData = #needs to equal GETTHISDATA
看看這個:
>>> import re
>>> url = '/s/GETTHISDATA/canBeIgnored/canBeIgnored'
>>> re.findall('(?<=/).*?(?=/)', url)
['s', 'GETTHISDATA', 'canBeIgnored']
>>> re.findall('(?<=/).*?(?=/)', url)[1]
'GETTHISDATA'
>>>
這樣做是捕獲兩個/
的之間的零個或多個字符(非貪婪)。爲了更清楚,這裏是一個細分:
(?<=/) # Poisitive look-back assertion to test if text is preceded by a/
.*? # Zero or more non-whitespace characters that are matched non-greedily
(?=/) # Positive look-ahead assertion to test if text is followed by a/
然而,一個更清潔,非正則表達式的解決辦法是隻各執/
:
>>> url.split('/')
['', 's', 'GETTHISDATA', 'canBeIgnored', 'canBeIgnored']
>>> url.split('/')[2]
'GETTHISDATA'
>>>
就個人而言,我會使用第二個解決方案。正則表達式在這裏似乎有點矯枉過正。
這(重新解決方案)可能會返回多個結果,例如,如果你有像'/ s/GETTHISDATA/notthis/orthis /'這樣的url ...在這種情況下,你至少會得到兩個結果,儘管正確的結果仍然是第一個...... –
這是一個很好的觀點。我改變了我的代碼結構來捕捉2/2之間的東西。儘管說實話,我只是給了正則表達式解決方案,因爲OP要求正則表達式。我的_real_答案是使用'str.split'。 – iCodez
'url.split(「/」)[2]' –
'url'是一個字符串?如果是這樣的話請把周圍的引號加上 –
你是否總是需要二級目錄? 「GETTHISDATA」與「canBeIoredored」有什麼區別? –