簡體   English   中英

在字符串python中獲取所有正則表達式的出現

[英]get all occurence of a regex in string python

我試圖在以下字符串TreeModel/Node/Node[1]/Node[4]/Node[1]這個:

TreeModel/Node
TreeModel/Node/Node[1]
TreeModel/Node/Node[1]/Node[4]
TreeModel/Node/Node[1]/Node[4]/Node[1]

在python中使用正則表達式 這是我嘗試的代碼:

string = 'TreeModel/Node/Node[1]/Node[4]/Node[1]'
pattern = r'.+?Node\[[1-9]\]'
print re.findall(pattern=pattern,string=string)
#result : ['TreeModel/Node/Node[1]', '/Node[4]', '/Node[1]']
#expected result : ['TreeModel/Node', 'TreeModel/Node/Node[1]', 'TreeModel/Node/Node[1]/Node[4]', 'TreeModel/Node/Node[1]/Node[4]/Node[1]']

您可以在此處使用split:

>>> s = 'TreeModel/Node/Node[1]/Node[4]/Node[1]'
>>> split_s = s.split('/')
>>> ['/'.join(split_s[:i]) for i in range(2, len(split_s)+1)]
['TreeModel/Node',
 'TreeModel/Node/Node[1]',
 'TreeModel/Node/Node[1]/Node[4]',
 'TreeModel/Node/Node[1]/Node[4]/Node[1]']

您還可以使用正則表達式:

for i in range(2, s.count('/')+2):
    s_ = '[^/]+/*'
    regex = re.search(r'('+s_*i+')', s).group(0)
    print(regex)
TreeModel/Node/
TreeModel/Node/Node[1]/
TreeModel/Node/Node[1]/Node[4]/
TreeModel/Node/Node[1]/Node[4]/Node[1]

我一點都不擅長Python,但對於regex部分,您在regex下面的特定字符串結構會匹配每個段:

/?(?:{[^{}]*})?[^/]+

大括號和前面的/是可選的。 它匹配一個斜杠標記(如果有),然后用其內容括起來(如果有的話),然后其余部分一直到下一個斜杠標記。

Python代碼(請參見現場演示 ):

matches = re.findall(r'/?(?:{[^{}]*})?[^/]+', string)
output = ''
for i in range(len(matches)):
  output += matches[i];
  print(output)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM