正则表达式字符串解析:模式以 ; 开头但可以以 [;,)%&@] 结尾

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

我正在尝试使用正则表达式解析字符串。字符串看起来像:

Stack;O&verflow;i%s;the;best!

我想将其解析为:

Stack&verflow%sbest!

因此,当我们看到

;
时,请删除所有内容,直到看到以下字符之一:[;,)%&@](或替换为空格“”)。

我正在Python中使用

re
包:

string = re.sub('^[^-].*[)/]$', '', string)

这就是我现在拥有的:

^[^;].*[;,)%&@]

据我了解,它说:从

;
的模式开始,读取
;
和 [;,)%&@] 字符之间匹配的所有内容

但结果是错误的,看起来像:

Stack;O&verflow;i%s;the;

此处演示。

我错过了什么?

python regex string replace python-re
1个回答
0
投票

好吧,在我的回答中,我假设您的预期输出中有错字。删除以 ; 开头的所有内容最多 (;,)%&@) 等等

Stack ;O &verflow ;i %s ;the ;最好!

会变成

Stack&verflow%s;最好!

对于您想要以

;
开头的正则表达式,然后是 0 次或多次
.*
之后的任何内容(如果您需要将字符更改为
.+
),然后是结束字符
[;,)%&@]
。要排除它们,您需要添加正向前瞻
?(?=[;,)%&@])
。顾名思义,这会向前看一个字符并尝试将其与您的序列相匹配

对于最终的正则表达式:

;.*?(?=[;,)%&@])

或者如果您需要介于两者之间的字符:

[;].+?(?=[;,)%&@])
© www.soinside.com 2019 - 2024. All rights reserved.