![](/img/trans.png)
[英]Extract URL in JSON String with Python using re.match() or split()
[英]Extract a section in url pattern using re.match
在的NodeJS,我使用正則表達式來提取下的子部分tenant
在這個網址, http://myServer:8000/api/running/tenant/sk/services
。 sk
可以正確打印。
代碼是
var re = /(?:[\w\W]+)\/tenant\/([\w]+?)\/(?:[\w\W]*)/
var results = re.exec('http://myServer:8000/api/running/tenant/sk/services')
console.log(results[1])
我將代碼移至python,
import re
m = re.match(r"(?:\w\W+)tenant/(\w+)/(?:[\w\W]*)", "http://myServer:8000/api/running/tenant/sk/services")
m.group(1)
它拋出AttributeError: 'NoneType' object has no attribute 'group'
為什么它不匹配tenant
后面的一個單詞?
findall /搜索應該可以幫助您
找到所有
>>> m = re.findall(r"(?:\w\W+)tenant/(\w+)/(?:[\w\W]*)", "http://myServer:8000/api/running/tenant/sk/services")
>>> m
['sk']
搜索
>>> m = re.search(r"(?:\w\W+)tenant/(\w+)/(?:[\w\W]*)", "http://myServer:8000/api/running/tenant/sk/services")
>>> m.group(1)
'sk'
匹配失敗的原因是因為它嘗試在字符串重新開始時進行匹配。
re.match(pattern,string,flags = 0)如果字符串開頭的零個或多個字符與正則表達式模式匹配,則返回相應的MatchObject實例。 如果字符串與模式不匹配,則返回None;否則返回false。 請注意,這與零長度匹配不同。
請注意,即使在MULTILINE模式下,re.match()也只會在字符串的開頭而不是每行的開頭進行匹配。
如果要在字符串中的任意位置找到匹配項,請改用search()(另請參見search()vs. match())。
match
不具有group
屬性。 嘗試search
-
>>>m = re.search(r"(tenant)/(\w+)/(\w+)", "http://myServer:8000/api/running/tenant/sk/services")
>>>m.group(1)
>>>'tenant'
>>>m.group(2)
>>>'sk'
>>>m.group(3)
>>>'services'
>>>m.groups()
>>>('tenant', 'sk', 'services')
或嘗試使用re.split
返回常規列表- (?<!\\\\)/(?!=\\\\)
表示查找/
不具有/
之前或之后的-並用它分割文本-
>>>re.split(r"(?<!\\)/(?!=\\)", "http://myServer:8000/api/running/tenant/sk/services")
>>>['http:', '', 'myServer:8000', 'api', 'running', 'tenant', 'sk', 'services']
實際上,在這種情況下,您不需要正則表達式, str.split()
就足夠了:
>>> url = 'http://myServer:8000/api/running/tenant/sk/services'
>>> l = url.split('/')
>>> l[l.index('tenant')+1]
'sk'
>>>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.