我正在尝试使用正则表达式解析字符串。字符串看起来像:
Stack;O&verflow;i%s;the;best!
我想将其解析为:
Stack&verflow%sbest!
因此,当我们看到
;
时,请删除所有内容,直到看到以下字符之一:[;,)%&@](或替换为空格“”)。
我正在Python中使用
re
包:
string = re.sub('^[^-].*[)/]$', '', string)
这就是我现在拥有的:
^[^;].*[;,)%&@]
据我了解,它说:从
;
的模式开始,读取 ;
和 [;,)%&@] 字符之间匹配的所有内容
但结果是错误的,看起来像:
Stack;O&verflow;i%s;the;
我错过了什么?
好吧,在我的回答中,我假设您的预期输出中有错字。删除以 ; 开头的所有内容最多 (;,)%&@) 等等
Stack ;O &verflow ;i %s ;the ;最好!
会变成
Stack&verflow%s;最好!
对于您想要以
;
开头的正则表达式,然后是 0 次或多次 .*
之后的任何内容(如果您需要将字符更改为 .+
),然后是结束字符 [;,)%&@]
。要排除它们,您需要添加正向前瞻 ?(?=[;,)%&@])
。顾名思义,这会向前看一个字符并尝试将其与您的序列相匹配
对于最终的正则表达式:
;.*?(?=[;,)%&@])
或者如果您需要介于两者之间的字符:
[;].+?(?=[;,)%&@])