如何捕获特定字符之前和之后的所有组

问题描述 投票:0回答:2

我正在尝试捕获;之前的所有组。我还需要捕获最后一个没有以;结尾的组。这是我的声明和代码。

正则表达式:

((\*|\/|\)|\(|[-+]\d+|[-+]?\d*\.\d+|\d+|\w+d?|\+|\-|=|{|}|:=|while|do|if|else|then|skip|or|and|not|>=)+;)+

声明:

x1:=0; x2:=1; x3:= (x1,x2,+); x4:=5; while {(x4,0,>=)} do {x4:= (x4,1,-); x1:=x2; x2:=x3; x3:= (x1, x2,+)}

我的正则表达式仅捕获第一组。我需要捕获所有组,包括最后一个。

因此,最后一组应为以下类别:

['x1:=0', 'x2:=1', 'x3:= (x1,x2,+)', 'x4:=5', 'while {(x4,0,>=)} do {x4:= (x4,1,-)', 'x1:=x2', 'x2:=x3', 'x3:= (x1, x2,+)']
python regex text-processing
2个回答
0
投票
看起来您可以只使用split:

ting = 'x1:=0; x2:=1; x3:= (x1,x2,+); x4:=5; while {(x4,0,>=)} do {x4:= (x4,1,-); x1:=x2; x2:=x3; x3:= (x1, x2,+)}' ting2 = ting.split(';') # ['x1:=0', ' x2:=1', ' x3:= (x1,x2,+)', ' x4:=5', ' while {(x4,0,>=)} do {x4:= (x4,1,-)', ' x1:=x2', ' x2:=x3', ' x3:= (x1, x2,+)}']


0
投票
两种非常简单的方法可以做到这一点。一个甚至不需要正则表达式。这是一些代码,显示了两种不同的实现。您想要的模式是:

' ?([^;]+);?'

示例代码:

import re statement = 'x1:=0; x2:=1; x3:= (x1,x2,+); x4:=5; while {(x4,0,>=)} do {x4:= (x4,1,-); x1:=x2; x2:=x3; x3:= (x1, x2,+)}' #-the quick way print('Quick way:') print(state.split('; ')) #-the ~magic~ regex way print('Regex way:') pattern = ' ?([^;]+);?' print(re.compile(pat).findall(state))

输出:

Quick way: ['x1:=0', 'x2:=1', 'x3:= (x1,x2,+)', 'x4:=5', 'while {(x4,0,>=)} do {x4:= (x4,1,-)', 'x1:=x2', 'x2:=x3', 'x3:= (x1, x2,+)}'] Regex way: ['x1:=0', 'x2:=1', 'x3:= (x1,x2,+)', 'x4:=5', 'while {(x4,0,>=)} do {x4:= (x4,1,-)', 'x1:=x2', 'x2:=x3', 'x3:= (x1, x2,+)}']

© www.soinside.com 2019 - 2024. All rights reserved.