我有一个文本文件。我需要找到以任意模式开头的文件的一部分,然后捕获模式之间的所有内容,它正在关闭括号。此模式可能在文件中出现多次。“开始(”将始终出现在模式之前。示例:
start
(
pattern
(
stuff,
stuff,
randomThing
(
random stuff
)
)
)
start
(
notThePattern
(
otherStuff,
otherStuff
)
)
start
(
pattern
(
moreStuff,
moreStuff
)
)
我想得到 [Start(Pattern(stuff,stuff,randomThing(random stuff))), Start(Pattern(moreStuff,moreStuff))]。
我这样做的方式是使用以下代码:
def myFunct(pattern, input):
allElements = []
match = re.search("start\s*?\(\s*?" + pattern, input)
while (match != None):
index = match.start()
element = getElementEndIndex(line[index:])
allElements.append(element)
input = input[index+len(element):]
match = re.search("start\s*?\(\s*?" + pattern, input)
getElementEndIndex 只是使用堆栈来查找结束括号和它的索引。
这是唯一的方法吗?可以只用一个正则表达式来解决吗?如果没有,是否有更好的方法来运行我拥有的正则表达式?
模式可以在“开始”部分中出现多次。但是,开始不能在另一个开始部分内。
start
(
pattern
()
blah
()
pattern
()
)
是可能的,但是
start
(
pattern
()
start
()
)
不是