我需要一些python来根据'URL‘字符串来确定’短名称‘。
我尝试过下面的RegEx模式,但是它不适用于下面的情况。
案例-1 :
输入'Get帐户‘的URL可以是
"GET /env/org/v1/insurance/accounts"
"GET /env/org/v1/insurance/accounts?page&page-size"注意:在这里,查询参数可能存在,也可能不存在。
Regex-1:
^GET /env/org/v1/insurance/accounts(\?)?(\w)?$案例-2:
输入'Get事务‘的URL可以是
"GET /env/org/v1/insurance/accounts/B001E2E0-7E5/transactions"
"GET /env/org/v1/insurance/accounts/6286CDC4-E2B/transactions?oldest-time"注意:在这里,'TransactionID‘每次都会发生变化,查询参数可能存在也可能不存在。
Regex-2:
^GET /env/org/v1/insurance/accounts/[A-Za-Z0-9\-]+/transactions(\?)?(\w)?$案例-3 :
“获取单个事务”的输入字符串可以是
"GET /env/org/v1/insurance/accounts/091CCD40-2E7/transactions/091CCD40-1E7?page"这样我就可以在Python代码中使用如下所示:
import re
def get_short_name(str):
if(re.match(regex_1,str):
return 'Get Accounts'
elif(re.match(regex_2,str):
return 'Get Transactions'
elif(re.match(regex_3,str):
return 'Get Single Transactions'
else:
return str发布于 2020-07-08 11:29:57
如果您想将正则表达式分为三个部分;您可以尝试这样的方法:
1. ^GET \/sit1\/org\/v1\/insurance\/accounts(?:\?.*)?$
2. ^GET \/sit1\/org\/v1\/insurance\/accounts\/.*$
3. ^GET \/sit1\/org\/v1\/insurance\/accounts\/.*\/transactions\/.*$对上述正则表达式的解释:
^, $ --表示行respectively.GET \/sit1\/org\/v1\/insurance\/accounts的开始和结束--与转义/.(?:\?.*)?匹配--表示匹配\?之后的所有内容的。外部optional.\/.*表示与整个模式0或1次匹配的量化符,即在第二个正则表达式中使其为accounts/.\/.*\/transactions\/.*;在第三个正则表达式中表示匹配accounts/.\/.*\/transactions\/.*之后的所有内容;在第三个正则表达式中表示所有内容;在/transactions/之前捕获所有内容,然后再捕获到行尾的所有内容。python中的示例实现:
import re
regex_1 = r"^GET \/sit1\/org\/v1\/insurance\/accounts(?:\?.*)?$"
regex_2 = r"^GET \/sit1\/org\/v1\/insurance\/accounts\/.*$"
regex_3= r"^GET \/sit1\/org\/v1\/insurance\/accounts\/.*\/transactions\/.*$"
test_str_accounts = "GET /sit1/org/v1/insurance/accounts?page&page-size"
test_str_transactions = "GET /sit1/org/v1/insurance/accounts/6286CDC4-E2B/transactions?oldest-time"
test_str_single_transactions = "GET /sit1/org/v1/insurance/accounts/091CCD40-2E7/transactions/091CCD40-1E7?page"
def get_short_name(str):
if re.match(regex_1,str):
return 'Get Accounts'
elif re.match(regex_3,str):
return 'Get Single Transactions'
elif re.match(regex_2,str):
return 'Get Transactions'
else:
return str
print(get_short_name(test_str_accounts))
print(get_short_name(test_str_transactions))
print(get_short_name(test_str_single_transactions))您可以在中找到上述实现的示例运行。
注意:请注意if语句的顺序。首先检查事务3。
发布于 2020-07-08 10:48:23
您可以使用urlparse和str.endswith
Ex:
from urllib.parse import urlparse
data = ['GET /sit1/org/v1/insurance/accounts', 'GET /sit1/org/v1/insurance/accounts?page&page-size', 'GET /sit1/org/v1/insurance/accounts/B001E2E0-7E5/transactions', 'GET /sit1/org/v1/insurance/accounts/6286CDC4-E2B/transactions?oldest-time']
for url in data:
o = urlparse(url.split()[1])
print(o.path)
if o.path.endswith('accounts'):
print('accounts')
if o.path.endswith('transactions'):
print('transactions')输出:
/sit1/org/v1/insurance/accounts
/sit1/org/v1/insurance/accounts
/sit1/org/v1/insurance/accounts/B001E2E0-7E5/transactions
/sit1/org/v1/insurance/accounts/6286CDC4-E2B/transactionshttps://stackoverflow.com/questions/62792939
复制相似问题