所以我有一個字串,其中包含我需要為我的主程式提取的資料。
它看起來像這樣:
string = "[email:[email protected]][days:90]"
從這個字串中,我想提取括號內的資料,并能夠用冒號分隔電子郵件和電子郵件地址,以便我可以分別存盤單詞 email 和電子郵件地址以獲得如下內容:
string = "[email:[email protected]]"
... some regex here ...
param_type = "email"
param_value = "[email protected]"
if param_type == 'email':
... my code to send an email to param_value ...
該字串最終最多可以有 2 對不同引數型別的括號,以便我可以指定要處理的函式:
string = "[email:[email protected]] [days:90]"
...regex to split by bracket group ....
param_type1 = "email"
param1 = "[email protected]"
param_type2 = "days"
param2 = "90"
if param_type1 != "":
... email code ...
if param_type2 != "":
... run other code for the specified number of days ...
主程式已經為這 2 個 param_types 提供了默認值,但我希望可以選擇指定電子郵件地址、天數、兩者,或都不指定。如果有的話,我主要需要知道如何檢索電子郵件地址,因為在線示例不適用于我的情況。謝謝!
uj5u.com熱心網友回復:
你可以使用
\[([^:]*):([^\]]*)]*\]
該正則運算式匹配任何 [attribute:value] 子字串,其中包含屬性和值部分的子運算式。
它搜索 a [,然后搜索一些不是的字符,然后:搜索a ,然后搜索一些不是:的字符],然后搜索 a ]。并且它將and 之間的部分[和:and之間:的部分括在]括號中。
因此,如果您在此正則運算式上使用,它會回傳在字串中找到findall的所有對的串列。[attribute:value]
例子:
import re
string = "[email:[email protected]] [days:90]"
pairs=re.findall(r'\[([^:]*):([^\]]*)]*\]', s)
# pairs = [('email', '[email protected]'), ('days', '90')]
for attr,val in pairs:
if attr=='email':
doSomethingWithEmail(val)
elif attr=='days':
doSomethingWidhDays(val)
uj5u.com熱心網友回復:
因此,在這種情況下,您可以只使用正則運算式來提取括號之間的內容,然后拆分冒號字符以獲取引數型別和引數,例如:
[s.split(":") for s in re.findall(r"\[(. ?)\]", string)]
所以你的代碼會是這樣的:
import re
string = "[email:[email protected]][days:90]"
type_and_param_pairs = [s.split(":") for s in re.findall(r"\[(. ?)\]", string)]
for param_type, param in type_and_param_pairs:
if param_type == "email":
# do something
elif param_type == "days":
# do something else
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/525827.html
上一篇:評估代碼是否是JS功能的簡化子集
下一篇:在bs4中使用find_all
