[英]How to use properly multiprocessing with f(var, param1, param2, …)
[英]extract string content between parenthesis -> for eg: function_name((param1),(param2)) should give (param1),(param2)
我想獲得功能fun5內的整個字符串。 例如:
1.) fun5(hello union fun1(param1) union fun2(param2)) union fun3(param3) union fun4(param4)
應該返回-> hello union fun1(param1) union fun2(param2)
2.) fun3(param3) union fun4(param4) union fun5(hello union fun1(param1) union fun2(param2))
應該返回-> hello union fun1(param1) union fun2(param2)
我嘗試使用以下正則表達式:
import re
str = "fun5(hello union fun1(param1) union fun2(param2)) union fun3(param3) union fun4(param4)"
if re.search(r'(:?\W|^)(:?fun5)\(', str, re.IGNORECASE):
exp = re.search(fun5\((.*?)\)', str, re.IGNORECASE).group(1)
print(exp)
但是由於內部嵌套了括號,因此無法正常工作。
如果您知道括號不會比某個有限數(示例中為2)深,則編寫正則表達式是可能的,但很棘手。 這是因為正則表達式根本不是為處理嵌套模式而設計的。 某些正則表達式引擎具有擴展功能,以允許模式的任意嵌套,或專門用於匹配嵌套括號中的文本,但Python不允許。
因此,如果您可能需要處理任意嵌套深度,則可以改用非正則表達式解決方案,例如下面的解決方案。 在這里,我們找到第一個開括號,然后逐個字符掃描。 每次找到一個開括號,我們都會增加深度。 每次找到一個右括號,我們都會減小深度並檢查是否在級別0。如果是,我們會找到一個與左括號匹配的右括號,然后返回結果。
def deparen(text):
start = text.find("(")
if start < 0:
raise ValueError("no opening parenthesis")
depth = 0
for i in range(start, len(text)):
if text[i] == "(":
depth += 1
elif text[i] == ")":
depth -= 1
if not depth:
return text[start+1:i]
raise ValueError("too few closing parentheses")
請注意,這不處理帶引號的括號。 例如,如果文本中可能包含帶引號的字符串,則這些字符串可能包含左括號和/或右括號,這不應計入嵌套中。 處理此問題的關鍵是檢測引號字符並跳過引號內的所有字符。 但是引號可能會被轉義,因此您也必須檢測到這一點……在某些時候,使用實際的解析器會變得更加容易。
怎么樣.*fun5\\((.*\\(.*\\))\\)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.